DELETE
DELETE 用于删除表中符合条件的行。
# 单逻辑表
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM [schema_name.]tbl_name
[WHERE where_condition]
#多逻辑表
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*]] ...
FROM table_references
[WHERE where_condition]
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
FROM [schema_name.]tbl_name[.*] [, [schema_name.]tbl_name[.*]] ...
USING table_references
[WHERE where_condition]
DELETE 语句从 tbl_name 中删除满足 where_condition 的行,并返回删除的行数;若没有 WHERE 条件,将删除表中所有的数据。
修饰符
DELETE 语句支持如下修饰符:
- 若设置 LOW_PRIORITY,DELETE 操作将在该表没有任何读操作之后执行
- QUICK,与 MySQL 存储引擎相关,参考 MySQL 文档
- 若设置 IGNORE,则会忽略删除过程中产生的错误
目前,DELETE 语句中的修饰符均会原样下推至底层 MySQL,不会对 DRDS 的行为产生影响。
语法限制
与 MySQL 的 DELETE 语法相比,存在如下限制:
- WHERE 条件中不支持子查询(相关子查询和非相关子查询)
- 不支持 ORDER BY 和 LIMIT
- 不支持 不可下推的删除多表数据
- 不支持 在多表删除中删除广播表中的数据(目标表列表中不可包含广播表)
如下 SQL 样例均暂不支持。
# 不支持 ORDER BY 和 LIMIT
DELETE FROM t WHERE id > 1 ORDER BY id limit 10;
# 不支持 子查询
DELETE FROM t1 WHERE t1.id IN (SELECT id FROM t2 WHERE id > 10)
# 不支持 不可下推的删除多表数据,t1, t2 和 t3 的拆分键均为 id
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.name;
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.name;
# 不支持 在多表删除中删除广播表中的数据,t1 为广播表
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;
相关文献
- MySQL DELETE 语法
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论