TRUNCATE TABLE
描述
该语句用于完全清空指定表,但是保留表结构,包括表中定义的 Partition 信息。从逻辑上说,该语句与用于删除所有行的 DELETE FROM 语句相同。
使用限制及注意事项
-
TRUNCATE TABLE操作通过删除表中的所有数据并重置表的元数据,从而实现高效清空表的目的。这种方法相比于逐行删除(使用DELETE FROM语句)具有显著的性能优势,尤其在处理大规模数据表时,因为它无需逐行锁定和日志记录。 -
TRUNCATE TABLE语句执行结果显示影响行数始终显示为0行。 -
使用
TRUNCATE TABLE语句,表管理程序不记得最后被使用的AUTO_INCREMENT值,但是会从头开始计数。 -
TRUNCATE语句不能在进行事务处理和表锁定的过程中进行,如果使用,将会报错。 -
只要表定义文件是合法的,则可以使用
TRUNCATE TABLE把表重新创建为一个空表,即使数据或索引文件已经被破坏。
权限要求
执行 TRUNCATE TABLE 语句,需要当前用户拥有表的 DROP 权限。有关 seekdb 权限的详细介绍,参见 seekdb 的权限分类。
语法
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 (0.001 sec)
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 (0.021 sec)