三者皆會移除資料,但機制、效能、可回復性、觸發器行為截然不同。選錯指令可能導致資料遺失、效能災難或無法回滾。
| 特性 | DELETE | TRUNCATE | DROP |
|---|---|---|---|
| 語言分類 | DML (資料操作) | DDL (定義) | DDL (定義) |
| 可回滾 (ROLLBACK) | 是 (寫入記錄檔) | 否 (最小記錄,立即認可) | 否 (立即認可) |
| 觸發器 | 啟動 AFTER/INSTEAD OF | 不啟動 | 不啟動 |
| WHERE 條件 | 支援 | 不支援 (全表) | 不適用 |
| 身分識別欄位重置 | 否 | 是 (重種子為 1) | 表不存在 |
| 空間釋放 | 否 (高水位不變) | 預設釋放至 MINEXTENTS (可 REUSE STORAGE) | 完全釋放 (含索引、約束、觸發器) |
| 高水位線 | 不動 | 重置至開頭 | 表消失 |
| 速度 (大表) | 慢 (逐列記錄) | 極快 (僅記錄頁釋放) | 極快 (僅更新系統表) |
| 外鍵約束 | 檢查 | 被參考時失敗 | 級聯刪除約束 |
| 權限需求 | DELETE 權限 | ALTER 權限 | CONTROL/DROP 權限 |
DELETE WHERE ... (記得備份、大量分批)。TRUNCATE TABLE (最快)。DROP TABLE。DELETE (無 WHERE 等同 TRUNCATE 但可回滾)。TRUNCATE ... REUSE STORAGE + 重新匯入 (極少用)。DELETE = 精準手術刀 (可回滾、觸發器、慢);TRUNCATE = 核爆清空 (極快、重置 IDENTITY、不可回滾);DROP = 連根拔起 (結構連帶消失)。依業務需求精準選擇,切勿混淆。