首批通过分布式安全可靠测评,为关键业务系统打造
删除数据
更新时间:2026-06-24 12:20:01
表中插入数据后,可以使用 DELETE 语句或其他语句来删除表中的记录。本文介绍了相关语句的使用方法和示例。
数据删除准备
在删除表数据前,请确认以下事项:
请确认您已连接到数据库的 Oracle 租户,连接数据库的操作请参见 连接方式概述。
说明
当前登录租户所属的租户模式可以由
sys租户通过查询oceanbase.DBA_OB_TENANTS视图进行确认。请确认您已拥有待操作的表的
DELETE权限。如果使用TRUNCATE TABLE语句清空表数据,则还需要拥有该表的CREATE权限。查看当前用户权限的相关操作请参见 查看用户权限。如果不具备该权限,请联系管理员为您授权,用户授权的相关操作请参见 直接授予权限。
使用 DELETE 语句删除数据
通常使用 DELETE 语句来删除表中的部分数据或全部数据。
简单的 DELETE 语句格式如下:
DELETE FROM table_name [ WHERE condition ];
| 参数 | 是否必填 | 描述 |
|---|---|---|
| table_name | 是 | 指定需要删除数据的表 |
| [ WHERE condition ] | 否 | 条件子句指定要删除的数据必须满足的条件,如果没有提供就全表删除。 |
说明
如果表记录数多达几百万以上,会形成大事务,可能会有性能问题。建议带上 WHERE 条件分批删除,或者使用 TRUNCATE TABLE 语句。
删除部分数据
通过 DELETE 语句加 WHERE 条件,可以删除表中满足条件的部分数据。
示例 1:删除 t_insert 表中符合 value = 10004 的所有行记录。
obclient [SYS]> SELECT * FROM t_insert;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
| 1 | CN | 10002 | 31-OCT-22 |
| 2 | US | 10004 | 31-OCT-22 |
| 3 | UK | 10004 | 01-NOV-22 |
+----+------+-------+------------+
3 rows in set
obclient [SYS]> DELETE FROM t_insert WHERE value = 10004;
Query OK, 2 rows affected
obclient [SYS]> SELECT * FROM t_insert;
+----+------+-------+------------+
| ID | NAME | VALUE | GMT_CREATE |
+----+------+-------+------------+
| 1 | CN | 10002 | 31-OCT-22 |
+----+------+-------+------------+
1 row in set
删除所有数据
当表中的数据量较小时,也可以直接使用 DELETE 语句删除所有行记录。
示例 2:删除表 t_insert 中的所有记录。
obclient [SYS]> DELETE FROM t_insert;
Query OK, 3 row affected
如果表中的数据记录多达百万条以上,一次性执行删除可能会出现性能问题,建议根据表内信息进行分批删除,示例如下。
示例 3: 分批删除 value < 20000,value < 30000,value < 40000 的数据。
obclient [SYS]> DELETE FROM t_insert WHERE value < 20000;
obclient [SYS]> DELETE FROM t_insert WHERE value < 30000;
obclient [SYS]> DELETE FROM t_insert WHERE value < 40000;
使用 TRUNCATE TABLE 语句清空表数据
TRUNCATE TABLE 语句用于完全清空指定表,但是保留表结构,包括表中定义的分区信息。从逻辑上来讲,该语句等价于删除所有行的 DELETE FROM 语句。
TRUNCATE TABLE 语句的语法格式如下:
TRUNCATE [TABLE] table_name;
示例 4:通过 TRUNCATE TABLE 语句清空表 t_insert 表中的所有数据。
obclient> TRUNCATE TABLE t_insert;
更多 TRUNCATE TABLE 语句的使用及说明请参见 TRUNCATE TABLE。
通过 DBLink 使用 DELETE 语句删除数据
当前 OceanBase 数据库支持通过 DBLink 删除 OceanBase 数据库(Oracle 模式)和 Oracle 数据库中的数据。
通过 DBLink 删除远端数据库表 t5 中 C2 = 7 的数据行的示例如下:
obclient> SET ob_trx_timeout = 1000000000;
Query OK, 0 rows affected
obclient> SELECT * FROM t5@orcl_dblink;
+------+------+
| C1 | C2 |
+------+------+
| 7 | 7 |
| 8 | 8 |
+------+------+
2 row in set
obclient> DELETE FROM t5@orcl_dblink WHERE C2 = 7;
Query OK, 1 row affected
obclient> commit;
Query OK, 0 rows affected
obclient> SELECT * FROM t5@orcl_dblink;
+------+------+
| C1 | C2 |
+------+------+
| 8 | 8 |
+------+------+
1 row in set
OceanBase 数据库 Oracle 模式支持把本地表数据写入(INSERT、DELETE、UPDATE 和 MERGE INTO)远端表,详细信息,参见 通过 DBLink 修改远端数据库中的数据。