描述

该语句用来删除表中符合条件的行,包括单表删除及多表删除两种方式。

格式

  1. DELETE [hint_options] [FROM] table_factor
  2. [WHERE where_condition]
  3. [{ RETURNING | RETURN } returning_exprs [into_clause]]
  4. table_factor:
  5. {tbl_name | table_subquery | '(' table_reference ')' }
  6. where_condition:
  7. expression
  8. returning_exprs:
  9. projection [, ...]
  10. into_clause:
  11. { INTO into_var_list | BULK COLLECT INTO into_var_list}
  12. into_var_list:
  13. { USER_VARIABLE | ref_name } [, ...]

参数解释

参数

描述

hint_options指定 hint 选项。

table_factor

指定需要删除的表名(基表、可更新视图、特殊子查询)。

where_condition

删除的表需要满足的过滤条件

returning_exprs

返回删除数据前的投影列。

into_clause

将删除数据前的投影列插入到指定列表。

注意:

特殊子查询指的类似于可更新视图对应的子查询,这类子查询不应该包含复杂的算子(比如group by/distinct/window function等)

示例

示例表及数据基于以下定义:

  1. OceanBase(admin@test)>create table t1(c1 int primary key, c2 int);
  2. Query OK, 0 rows affected (0.16 sec)
  3. OceanBase(admin@test)>select * from t1;
  4. +----+------+
  5. | c1 | c2 |
  6. +----+------+
  7. | 1 | 1 |
  8. | 2 | 2 |
  9. | 3 | 3 |
  10. | 4 | 4 |
  11. +----+------+
  12. 4 rows in set (0.06 sec)
  • 单表删除:删除 “c1=2” 的行,其中 c1 列为表 t1 中的 Primary Key。
  1. OceanBase(admin@test)>DELETE FROM t1 WHERE c1 = 2;
  2. Query OK, 1 row affected (0.02 sec)
  3. OceanBase(admin@test)>select * from t1;
  4. +----+------+
  5. | c1 | c2 |
  6. +----+------+
  7. | 1 | 1 |
  8. | 3 | 3 |
  9. | 4 | 4 |
  10. +----+------+
  11. 3 rows in set (0.01 sec)
  • 单表删除:直接操作子查询进去删除操作。
  1. OceanBase(admin@test)>DELETE FROM (SELECT * FROM t1);
  2. Query OK, 4 rows affected (0.04 sec)
  3. OceanBase(admin@test)>select * from t1;
  4. Empty set (0.01 sec)
  • 单表删除:包含returning 子句。
  1. OceanBase(admin@test)>DELETE FROM t1 RETURNING c1;
  2. +----+
  3. | C1 |
  4. +----+
  5. | 1 |
  6. | 2 |
  7. | 3 |
  8. | 4 |
  9. +----+
  10. 4 rows in set (0.01 sec)
  11. OceanBase(admin@test)>select * from t1;
  12. Empty set (0.01 sec)