跳到主要内容

PostgreSQL DROP 与 TRUNCATE 教程

清空或删除表有三种手段:DELETE(删行)、TRUNCATE(快速清空)、DROP(删表)。它们的行为、速度和可回滚性差异很大。

本篇内容​

  • DROP TABLE:删除表结构与数据
  • TRUNCATE:快速清空数据、保留结构
  • DELETE:逐行删除
  • 三者对比表与级联行为

DROP TABLE​

-- 删除整张表(结构 + 数据)
DROP TABLE users;

-- 幂等写法
DROP TABLE IF EXISTS users;

-- 级联删除依赖它的外键表/视图
DROP TABLE users CASCADE;

TRUNCATE​

-- 快速清空所有行,保留表结构,通常比 DELETE 快得多
TRUNCATE TABLE users;

-- 多张一起清空
TRUNCATE TABLE users, orders;

-- 清空并重置自增序列
TRUNCATE TABLE users RESTART IDENTITY;

三种方式对比​

操作速度保留结构可 WHERE触发器事务可回滚
DELETE慢(逐行)是是触发是
TRUNCATE快是否不触发行级触发器是(在事务中)
DROP快否否否是(在事务中)
待补充(TODO)
  • 补充:TRUNCATE 需要的锁与权限(相比 DELETE 更重,会阻塞读写)
  • 补充:DELETE 不回收空间的 Vacuum 机制与表膨胀
  • 补充:生产环境删表的安全习惯(先重命名确认、备份、DBA 审批)