首页/数据/SQL 速查/TRUNCATE TABLE 清空表的边界
变更与事务52 条

TRUNCATE TABLE 清空表的边界

快速清空全表:MySQL 里是 DDL(隐式提交、不可回滚),PostgreSQL 里可回滚但持有 ACCESS EXCLUSIVE 锁。

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

示例

示例
TRUNCATE TABLE staging_orders;

-- PostgreSQL 可连自增一并重置,并可级联处理外键
TRUNCATE TABLE staging_orders RESTART IDENTITY CASCADE;
速度页级回收,比 DELETE 全表快得多
自增两库都重置自增/序列(PG 需 RESTART IDENTITY 才重置)
外键被外键引用的表:MySQL 直接拒绝,PG 需 CASCADE 或同时清空引用方

易错点

  • MySQL 的 TRUNCATE 无法在事务中回滚(隐式提交),执行前必须确认目标表
  • PostgreSQL 的 TRUNCATE 会取 ACCESS EXCLUSIVE 锁,线上清空大表要挑低峰并设置 lock_timeout

数据来源与参考

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