首批通过分布式安全可靠测评,为关键业务系统打造
DELETE
更新时间:2026-04-06 13:23:30
描述
该语句用于删除表中符合条件的行(数据)。
权限要求
执行 DELETE 语句需要当前用户拥有 DELETE 的系统权限。有关 OceanBase 数据库权限的详细介绍,请参见 Oracle 模式下的权限分类。
语法
DELETE [hint_options] FROM table_factor
[WHERE where_expression]
[{RETURNING | RETURE } returning_exprs [ into_clause ]]
[LOG ERRORS [INTO] table_name REJECT LIMIT { integer | UNLIMITED }]
table_factor:
{table_name | table_subquery | '(' table_reference ')' }
returning_exprs:
projection_col_name [,projection_col_name ...]
into_clause:
[BULK COLLECT] INTO into_var_list
into_var_list:
{ USER_VARIABLE | ref_name } [, { USER_VARIABLE | ref_name }...]
参数解释
| 参数 | 说明 |
|---|---|
DELETE |
执行删除操作的关键词。 |
hint_options |
可选的提示选项,用于优化查询的执行计划。 |
| table_factor | 指定需要删除的表名(基表、可更新视图、特殊子查询)。
注意特殊子查询是指类似于可更新视图对应的子查询,这类子查询不应该包含复杂的算子(例如 |
table_name |
要删除数据的目标表名。 |
table_subquery |
可选的子查询,用于指定要删除的记录来源。 |
table_reference |
表的引用,可以是表名或其他形式的表表达式。 |
WHERE where_expression |
可选的条件,用于指定要删除的记录。 |
RETURNING |
可选的关键词,表示在删除操作后返回指定的列值。 |
RETURN |
与 RETURNING 相同,另一种写法。 |
returning_exprs |
要返回的列名列表,可以包含多个列名。 |
into_clause |
可选的语句,用于将返回的值存储到变量中。 |
BULK COLLECT |
指示使用批量收集方式将返回结果存储到变量。 |
into_var_list |
返回值存储的变量列表,可以是用户定义的变量或引用名。 |
LOG ERRORS |
可选的语句,指示在删除过程中记录错误。 |
INTO |
指定记录错误的目标表名。 |
REJECT LIMIT |
指定在错误发生时,允许的最大记录数,可以是整数或无限制。 |
示例
创建表 tbl1 并插入数据。
obclient> CREATE TABLE tbl1(col1 INT PRIMARY KEY, col2 INT);
Query OK, 0 rows affected
obclient> INSERT INTO tbl1 VALUES(1,1),(2,2),(3,3),(4,4);
Query OK, 4 rows affected
Records: 4 Duplicates: 0 Warnings: 0
obclient> SELECT * FROM tbl1;
+------+------+
| COL1 | COL2 |
+------+------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
+------+------+
4 rows in set
单表删除:删除
col1=2的行,其中col1列为表tbl1中的 Primary Key。obclient>DELETE FROM tbl1 WHERE col1 = 2; Query OK, 1 row affected obclient>SELECT * FROM tbl1; +----+------+ | COL1 | COL2 | +----+------+ | 1 | 1 | | 3 | 3 | | 4 | 4 | +----+------+ 3 rows in set单表删除:直接操作子查询进去删除操作。
obclient> DELETE FROM (SELECT * FROM tbl1); Query OK, 4 rows affected obclient> SELECT * FROM tbl1; Empty set单表删除:包含
RETURNING子句。obclient> DELETE FROM tbl1 RETURNING col1; +----+ | COL1 | +----+ | 1 | | 2 | | 3 | | 4 | +----+ 4 rows in set obclient>SELECT * FROM t1; Empty set