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

MySQL 刪除操作深度對比:DELETE 與 TRUNCATE 的差異、性能與陷阱全解析

     編輯:MySQL 綜合教學

語法對比

-- DELETE
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
  [WHERE where_condition]
  [ORDER BY ...]
  [LIMIT row_count]

-- TRUNCATE
TRUNCATE [TABLE] tbl_name

核心差異對照表

維度DELETETRUNCATE
執行機制逐行標記刪除,寫 Undo Log,觸發器生效Drop 表並重建,DDL 操作,隱式提交
WHERE 支持支持不支持(全表清空)
事務安全支持 ROLLBACK不支持(自動提交)
鎖粒度行鎖(InnoDB)表鎖/元數據鎖
自增計數器保留最大值+1重置為 1
返回影響行數精確返回不返回(或 0)
外鍵約束檢查約束,受阻則報錯有外鍵引用時**轉為 DELETE**執行
觸發器BEFORE/AFTER DELETE 觸發**不觸發**
性能(大表)慢(需掃描、寫日誌)極快(毫秒級)
空間回收需 OPTIMIZE TABLE立即釋放磁盤空間
復制影響Binlog 記錄每行(ROW 格式)Binlog 記錄 DDL,從庫同步極快

DELETE 進階修飾符

  • LOW_PRIORITY:等待無讀鎖時執行(MyISAM)。
  • QUICK:不合併索引葉節點,適用「刪除後隨即插入相近鍵」場景。
  • IGNORE:忽略錯誤(如外鍵失敗轉警告)。

多表 DELETE 語法

SET FOREIGN_KEY_CHECKS=0;
TRUNCATE TABLE t;
SET FOREIGN_KEY_CHECKS=1;
  • 需保留部分數據:
    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved