3.2.3 DELETE
3.2.3.1 Single-Table Syntax
3.2.3.1.1 Syntax
DELETE
FROM tbl_name [[AS] tbl_alias]
[WHERE where_condition]
3.2.3.1.2 与MySQL语法区别
下文中红色表示不支持的语法或关键字
DELETE
- [LOW_PRIORITY] [QUICK] [IGNORE]
FROM tbl_name [[AS] tbl_alias]
- [PARTITION (partition_name [, partition_name] ...)]
[WHERE where_condition]
- [ORDER BY ...]
- [LIMIT row_count]
3.2.3.1.3 举例
delete from test where id>5;
3.2.3.1.4 限制
- 原则上Delete语句中的where_condition部分只允许出现简单的条件,不能支持计算表达式以及子查询
3.2.3.2 Multiple-Table Syntax
- 原则上不支持多表Join 的DELETE
- 存在特例,当DELETE满足以下判断条件时,部分复杂DELETE语句会在确保数据正确的情况下被下发执行
- 包括update/delete语句操作多表的时候,【操作的全是全局表,并拥有同样的分片范围,并且where条件中不含有子查询】或【所有操作的表都有条件显式路由到同一个节点,并且where条件不含有子查询】
- 包括update/delete语句操作单表,但是where条件中包含子查询时,【被操作的表格是单节点表,where条件中的所有表格都有条件能路由到同一个节点】或【被操作的表格是全局表或者分片表,其余所有表格都是全局表,并且分片范围都能覆盖被操作的表格(需注意“分片范围”指的是 配置文件里面配的表分片范围,而不是经过 where 二次筛选后的范围。)】
3.2.3.2.1 Syntax
DELETE
tbl_name[.*] [, tbl_name[.*]] ...
FROM table_references
[WHERE where_condition]
DELETE
FROM tbl_name[.*] [, tbl_name[.*]] ...
USING table_references
[WHERE where_condition]
3.2.3.2.2 与MySQL语法区别
下文中红色表示不支持的语法或关键字
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]