首页/数据/SQL 速查/DELETE / TRUNCATE / DROP TABLE 对比
变更与事务52 条

DELETE / TRUNCATE / DROP TABLE 对比

三种“删数据”的语义与代价差异明显:选错轻则慢,重则不可回滚丢结构。

SQL 速查数据更新于 2026-10-12

三种方式对比

维度DELETETRUNCATE TABLEDROP TABLE
删除范围满足条件的行全表所有行表结构+数据+索引
事务回滚事务内可回滚MySQL 不可回滚;PG 可回滚MySQL 不可回滚;PG 可回滚
触发器触发 DELETE 触发器不触发不触发
自增计数不重置MySQL 重置;PG 默认不重置随表消失
典型耗时逐行,大表慢页级,很快很快

示例

示例
DELETE FROM t WHERE id < 1000;   -- 删部分
TRUNCATE TABLE t;                -- 清空
DROP TABLE t;                    -- 连表删除

易错点

  • 把 TRUNCATE 当“会触发的 DELETE”用:触发器不执行,依赖触发器的审计/同步逻辑会静默失效
  • PostgreSQL 虽然能回滚 TRUNCATE,但锁级别高,误执行同样会造成线上阻塞

数据来源与参考

  • MySQL 8.0 Reference Manual · TRUNCATE TABLE
  • PostgreSQL Documentation · TRUNCATE
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌