-- 單表
DELETE [LOW_PRIORITY] [QUICK] [IGNORE] FROM tbl_name
[WHERE where_definition]
[ORDER BY ...]
[LIMIT row_count]
-- 多表
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
tbl_name[.*] [, tbl_name[.*] ...]
FROM table_references
[WHERE where_definition]
-- 或
DELETE [LOW_PRIORITY] [QUICK] [IGNORE]
FROM tbl_name[.*] [, tbl_name[.*] ...]
USING table_references
[WHERE where_definition]
ORDER BY 實現「刪除最舊 N 筆」等邏輯:DELETE FROM log WHERE user='x' ORDER BY ts LIMIT 100REPEAT
DELETE FROM big_table WHERE condition LIMIT 1000;
UNTIL ROW_COUNT() = 0 END REPEAT;
INNER JOIN、LEFT JOIN 等連接類型DELETE t1 FROM test AS t1, test2 WHERE ...DELETE db1.t1, db2.t2 FROM db1.t1, db2.t2 WHERE ...ORDER BY 與 LIMITTRUNCATE [TABLE] tbl_name
| 特性 | DELETE | TRUNCATE |
|---|---|---|
| 執行速度 | 逐行刪除,較慢 | Drop & Recreate 表,極快 |
| 事務安全 | 支援回滾 | 不支援(隱含 Commit) |
| 鎖定行為 | 行鎖/表鎖視引擎 | 表級元資料鎖 |
| 回傳影響行數 | 是 | 否(回傳 0) |
| AUTO_INCREMENT | 不重置 | 重置為 1 |
| 外鍵約束 | 檢查約束 | InnoDB 有 FK 時退化為 DELETE |
| 觸發器 | 觸發 ON DELETE | 不觸發 |
| 損壞表修復 | 無法 | 僅需 .frm 存在即可重建 |
| 分區表 | 刪除資料保留分區 | 保留分區定義,重建資料/索引檔 |
DELETE(逐行檢查約束)DROP TABLE + CREATE TABLE(瞬間完成)AUTO_INCREMENT 計數器永遠重置,無論是否有外鍵CREATE TABLE new AS SELECT ... FROM old WHERE keep_condition; RENAME TABLE old TO old_bak, new TO old;DELETE ... LIMIT 避免長事務、鎖升級、Replication 延遲OPTIMIZE TABLE 回收空間、整理索引DELETE QUICK + OPTIMIZE TABLE 組合加速索引重建DELETE 靈活、事務安全、支援條件與限制;TRUNCATE 極速、重置自增、但不可回滾、不觸發 Trigger、受外鍵限制。根據業務場景選擇:清空全表用 TRUNCATE,條件刪除用 DELETE,大量條件刪除用分批 DELETE 或 重建表法。