TRUNCATE TABLE 命令

TRUNCATE TABLE 命令用于删除表中的所有行,并且不会触发任何触发器操作。与 DELETE 命令不同,TRUNCATE TABLE 没有 WHERE 子句,因此无法指定单独的行。


DELETE 命令的区别

  1. 性能优势
    相较于 DELETE 命令,TRUNCATE TABLE 在大多数数据库管理系统(DBMS)中的性能显著更高。这是因为 DBMS 可以一次性清空表及其索引,无需逐行处理。

  2. 无条件删除
    TRUNCATE TABLE 命令中没有 WHERE 子句,无法选择性删除行。

  3. 无触发器动作
    TRUNCATE TABLE 不会触发任何定义在表上的触发器操作。

  4. 锁定机制
    TRUNCATE TABLE 会锁定整个表,而不是单独的行。

  5. 外键约束
    如果表 t2 被另一个表 t1外键引用,执行 TRUNCATE TABLE t2 会失败,无论表 t1 是否实际引用了表 t2 中的行。DBMS 仅检查外键约束的定义,而非实际引用。


语法

TRUNCATE TABLE 的语法非常简单:

TRUNCATE TABLE <表名>;

示例

-- 删除表 myTable 中的所有行
TRUNCATE TABLE myTable;

-- 注意:大多数 DBMS 不支持对 TRUNCATE 操作进行 ROLLBACK(回滚),
-- 与 DELETE 命令的行为相反。

类比说明

可以通过以下类比理解 TRUNCATE TABLEDELETE 命令的区别:

  • TRUNCATE TABLE:像一位卡车司机在施工现场倾倒一整车沙子,直接将整个车厢的沙子倾倒干净。
  • DELETE:则像这位司机爬上车厢,一粒一粒地将沙子扔下来。

这种差异体现了 TRUNCATE TABLE 的高效性和整体操作性。

Last modified: Tuesday, 28 January 2025, 1:37 PM