首批通过分布式安全可靠测评,为关键业务系统打造
TRUNCATE TABLE
更新时间:2026-04-09 16:03:54
描述
该语句用于完全清空指定表,但是保留表结构,包括表中定义的 Partition 信息。从逻辑上说,该语句与用于删除所有行的 DELETE FROM 语句相同。
使用限制及注意事项
TRUNCATE TABLE操作通过删除表中的所有数据并重置表的元数据,从而实现高效清空表的目的。这种方法相比于逐行删除(使用DELETE FROM语句)具有显著的性能优势,尤其在处理大规模数据表时,因为它无需逐行锁定和日志记录。TRUNCATE TABLE语句执行结果显示影响行数始终显示为0行。使用
TRUNCATE TABLE语句,表管理程序不记得最后被使用的AUTO_INCREMENT值,但是会从头开始计数。TRUNCATE语句不能在进行事务处理和表锁定的过程中进行,如果使用,将会报错。只要表定义文件是合法的,则可以使用
TRUNCATE TABLE把表重新创建为一个空表,即使数据或索引文件已经被破坏。
权限要求
执行 TRUNCATE TABLE 语句,需要当前用户拥有表的 DROP 权限。有关 OceanBase 数据库权限的详细介绍,请参见 MySQL 模式下的权限分类。
语法
TRUNCATE [TABLE] table_name;
参数解释
| 参数 | 描述 |
|---|---|
| table_name | 指定表名。 |
示例
创建表
test_tbl1。CREATE TABLE test_tbl1(col1 INT AUTO_INCREMENT PRIMARY KEY, col2 VARCHAR(20)) PARTITION BY HASH(col1) PARTITIONS 5;向表
test_tbl1中插入测试数据。INSERT INTO test_tbl1(col2) VALUES('A1'),('A2'),('A3');返回结果如下:
Query OK, 3 rows affected Records: 3 Duplicates: 0 Warnings: 0完全清空表
test_tbl1。TRUNCATE TABLE test_tbl1;查看表
test_tbl1数据。SELECT * FROM test_tbl1;返回结果如下:
Empty set查看表
test_tbl1定义。SHOW CREATE TABLE test_tbl1;返回结果如下:
+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | test_tbl1 | CREATE TABLE `test_tbl1` ( `col1` int(11) NOT NULL AUTO_INCREMENT, `col2` varchar(20) DEFAULT NULL, PRIMARY KEY (`col1`) ) AUTO_INCREMENT = 1 AUTO_INCREMENT_MODE = 'ORDER' DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 partition by hash(col1) (partition `p0`, partition `p1`, partition `p2`, partition `p3`, partition `p4`) | +-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set