全部产品
云市场

DELETE

更新时间:2019-03-04 14:51:23

DELETE 用于删除表中符合条件的行。

  1. # 单逻辑表
  2. DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM [schema_name.]tbl_name
  3. [WHERE where_condition]
  4. #多逻辑表
  5. DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
  6. tbl_name[.*] [, tbl_name[.*]] ...
  7. FROM table_references
  8. [WHERE where_condition]
  9. DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
  10. FROM [schema_name.]tbl_name[.*] [, [schema_name.]tbl_name[.*]] ...
  11. USING table_references
  12. [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 样例均暂不支持。

  1. # 不支持 ORDER BY 和 LIMIT
  2. DELETE FROM t WHERE id > 1 ORDER BY id limit 10;
  3. # 不支持 子查询
  4. DELETE FROM t1 WHERE t1.id IN (SELECT id FROM t2 WHERE id > 10)
  5. # 不支持 不可下推的删除多表数据,t1, t2 和 t3 的拆分键均为 id
  6. DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.name;
  7. DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.name;
  8. # 不支持 在多表删除中删除广播表中的数据,t1 为广播表
  9. DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;
  10. DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.id;

相关文献