22-2.sharding-jdbc源码之DELETE解析

本文详细探讨了Sharding-JDBC如何解析DELETE类型的SQL语句,从lexerEngine.nextToken()开始,依次分析skipAll(), unsupportedIfEqual(), TableReferencesClauseParser.parse(), skipUntil()以及WhereClauseParser.parse()的过程,揭示了Sharding-JDBC在处理分库分表时对DELETE语句的支持和限制。" 97681730,7918273,CSS Button过渡效果详解,"['CSS', '前端开发', '过渡动画']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

阿飞Javaer,转载请注明原创出处,谢谢!!

DELETE语法

分析delete解析之前,首先看一下mysql官方对delete语法的定义:
- Single-Table Syntax

DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [WHERE where_condition]
    [ORDER BY ...]
    [LIMIT row_count]
  • Multi-table Syntax
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    tbl_name[.*] [, tbl_name[.*]] ...
    FROM table_references
    [WHERE where_condition]

DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
    FROM tbl_name[.*] [, tbl_name[.*]] ...
    USING table_references
    [WHERE where_condition]

摘自https://dev.mysql.com/doc/refman/8.0/en/delete.html

DELETE解析

接下来分析sharding-jdbc是如何解析delete类型的SQL语句的,SQLStatement result = sqlParser.parse()得到SQL解析器后,执行AbstractDeleteParserparse()方法,核心源码如下:

@Override
public DMLStatement parse() {
    lexerEngine.nextToken();
    lexerEngine.skipAll(getSkippedKeywordsBetweenDeleteAndTable());
    lexerEngine.unsupportedIfEqual(getUnsupportedKeywordsBetweenDeleteAndTable());
    DMLStatement result = new DMLStatement();
    deleteClauseParserFacade.getTableReferencesClauseParser().parse(result, true);
    lexerEngine.skipUntil(DefaultKeyword.WHERE);
    deleteClauseParserFacade.getWhereClauseParser().parse(shardingRule, result, Collections.<SelectItem>emptyList());
    return result;
}

对应的泳道图如下所示:
DELETE解析泳道图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值