📚 目录

  1. 概述
  2. TRUNCATE TABLE 的基本语法
  3. TRUNCATE TABLE 与 DELETE 的区别
  4. TRUNCATE TABLE 的应用场景
  5. 使用 TRUNCATE TABLE 的注意事项
  6. 参考资料

🛠️ 概述

TRUNCATE TABLE 是 PostgreSQL 中用来删除表中所有数据的命令。与 DELETE 不同,TRUNCATE 操作更快速且高效,因为它通过删除整个表的数据而不逐行删除。执行 TRUNCATE TABLE 后,表的结构(列、约束等)保持不变,表会变为空,但它不会触发 DELETE 触发器或生成日志记录,这使得它的执行速度远快于 DELETE


📝 TRUNCATE TABLE 的基本语法

TRUNCATE 的基本语法如下:

TRUNCATE TABLE table_name;

  • table_name:要删除所有数据的表名。

示例(清空表数据):

TRUNCATE TABLE employees;

此命令会删除 employees 表中的所有数据,但表的结构仍然保留。


📝 TRUNCATE TABLE 与 DELETE 的区别

虽然 TRUNCATEDELETE 都可以删除表中的数据,但它们的工作方式和性能表现有所不同:

特性TRUNCATE TABLEDELETE
删除数据的方式快速且不逐行删除逐行删除,逐行记录日志
触发器是否执行不触发触发器会触发触发器
是否生成日志生成最少日志逐行生成日志
是否可以回滚可以回滚可以回滚
删除的行数删除所有行可以删除指定条件下的行
锁定表的粒度锁定整个表锁定单行或锁定表

示例(使用 DELETE 删除特定数据):

DELETE FROM employees WHERE department_id = 2;

此命令会删除 department_id 为 2 的所有员工记录。


📝 TRUNCATE TABLE 的应用场景

  1. 清空表数据:当你想删除表中的所有数据,但不想删除表结构时,使用 TRUNCATE 更高效。例如,在需要清空缓存数据时非常有用。
  2. 性能优化:如果表数据量非常大,且不需要逐行删除,可以使用 TRUNCATE 以避免性能问题。
  3. 批量清理数据:在批量清理临时表、日志表或缓存表时,TRUNCATE 能显著提高效率。

示例(清空临时数据表):

TRUNCATE TABLE temp_data;

该命令会清空 temp_data 表中的所有数据。


📝 使用 TRUNCATE TABLE 的注意事项

  • 不能删除表结构TRUNCATE 仅删除数据,而不会删除表本身的结构、约束、索引等。
  • 无法撤销特定行的删除:一旦执行 TRUNCATE,删除的数据无法恢复,除非在事务中使用回滚。
  • 不触发 DELETE 触发器:如果表上定义了触发器来监控 DELETE 操作,执行 TRUNCATE 时这些触发器将不会被触发。
  • 依赖于外键的表:如果表有外键约束,且约束表上有数据,TRUNCATE 会失败,除非使用 CASCADE

示例(使用 CASCADE 清空相关表数据):

TRUNCATE TABLE employees CASCADE;

使用 CASCADE 时,所有引用 employees 表的外键表也会被清空。


📘 参考资料