UPDATE/DELETE 不帶 WHERE 將全表生效,這是生產事故高發區。本文通過圖示與實例,強化條件約束意識,並介紹 NULL 賦值刪除列值、主鍵驗證、預先 SELECT 驗證等最佳實踐。
UPDATE customers
SET email = 'elmer@fudd.com'
WHERE cust_id = 10005;
若省略 WHERE,全表 email 均被覆蓋為同一值,災難性後果。
UPDATE table_name
SET column_name = NULL
WHERE condition;
適用於保留行結構但清空某字段場景。
DELETE FROM customers
WHERE cust_id = 10005;
同理,無 WHERE 將清空全表。
-- 驗證影響範圍
SELECT * FROM customers WHERE cust_id = 10005;
-- 確認無誤再執行
DELETE FROM customers WHERE cust_id = 10005;
BEGIN; ... COMMIT/ROLLBACK;,給自己後悔藥| 特性 | DELETE | TRUNCATE |
|---|---|---|
| WHERE 支援 | 是 | 否 |
| 觸發器 | 觸發 | 不觸發 |
| 自增重置 | 不重置 | 重置 |
| 回滾 | 可回滾 | 不可回滾(隱式提交) |
| 速度 | 逐行刪除,較慢 | 元數據操作,極快 |
清空全表優先 TRUNCATE;帶條件刪除只能 DELETE。