跳到主要内容

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指定表名。

示例

  1. 创建表 test_tbl1

    CREATE TABLE test_tbl1(col1 INT AUTO_INCREMENT PRIMARY KEY, col2 VARCHAR(20))
    PARTITION BY HASH(col1) PARTITIONS 5;
  2. 向表 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
  3. 完全清空表 test_tbl1

    TRUNCATE TABLE test_tbl1;
  4. 查看表 test_tbl1 数据。

    SELECT * FROM test_tbl1;

    返回结果如下:

    Empty set
  5. 查看表 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)

相关文档

清空表