首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL TRUNCATE TABLE 完全指南:與 DELETE 差異、引擎行為、AUTO_INCREMENT 重置

     編輯:MySQL 綜合教學

語法

TRUNCATE [TABLE] tbl_name

核心差異:TRUNCATE vs DELETE

維度TRUNCATE TABLEDELETE FROM tbl_name
WHERE 條件不支援支援
執行機制DDL:Drop + Recreate 表結構DML:逐行刪除、記錄 Binlog
速度極快(元數據操作)慢(隨行數線性)
事務安全不安全(隱式提交,不可回滾)安全(支援 ROLLBACK)
返回影響行數不返回(或返回 0)返回實際刪除行數
AUTO_INCREMENT重置為 1不重置(保留最大值+1)
觸發器不觸發觸發 BEFORE/AFTER DELETE
外鍵約束 (InnoDB)轉為 DELETE 執行正常檢查
損壞表恢復僅需 .frm 存在即可重建空表無法操作損壞表
分區表保留分區定義,重建數據/索引文件逐分區刪除

引擎特定行為

InnoDB

  • 有外鍵引用時 → 退化為逐行 DELETE(保留外鍵檢查);
  • 無外鍵 → Fast Truncate(Drop + Recreate);
  • 始終重置 AUTO_INCREMENT,無論是否有外鍵。

MyISAM / MEMORY / 其他

  • 均為 Fast Truncate;
  • 不記錄最後 AUTO_INCREMENT 值,歸零重算;
  • 不支援事務,執行期間表鎖獨佔。

實戰場景選型

場景推薦理由
清空大表、重置自增 ID、無外鍵依賴TRUNCATE秒級完成,釋放磁盤空間
需保留部分數據、需觸發器、需事務回滾DELETE + WHERE精確控制、安全
InnoDB 表被外鍵引用DELETE 或 先 DISABLE FK → TRUNCATE → ENABLE FKTRUNCATE 會退化為 DELETE,無速度優勢
定時任務清理舊分區ALTER TABLE ... TRUNCATE PARTITION分區級截斷,元數據操作

權限要求

需 DROP 權限(因本質是 Drop Table),而非 DELETE 權限。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved