您可以使用DELETE语句删除表中符合条件的行。

语法

下述DELETE语句表示从 tbl_name中删除满足where_condition的行,并返回删除的行数;若没有WHERE条件,将删除表中所有的数据。

# 单逻辑表
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支持如下修饰符:
    • 若设置LOW_PRIORITY,DELETE操作将在该表没有任何读操作之后执行。
    • 若设置IGNORE,则会忽略删除过程中产生的错误。
    • QUICK,与MySQL存储引擎相关,详情请参见MySQL文档
  • DELETE语句中的修饰符均会原样下推至存储层MySQL,不会对DRDS的行为产生影响。

语法限制

与原生MySQL的DELETE语法相比,DRDS的DELETE语法存在以下限制。

默认禁止更新行数超过10000的不可下推的DELETE,需要通过HINT打开限制,例如:

# 默认禁止 删除行数超过10000的不可下推的 DELETE,t1, t2 和 t3 的拆分键均为 id

DELETE FROM t1 ORDER BY name LIMIT 10001;
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.name LIMIT 10001;
DELETE FROM t1, t2 USING t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.id=t2.id AND t2.id=t3.name LIMIT 10001;