sql_safe_updates(別名 safe_updates)是一個會話級/全局變量,默認值 0(關閉)。設為 1(開啟) 後,會阻止以下「不安全」的 UPDATE/DELETE 語句執行:
WHERE 條件使用鍵(主鍵/唯一鍵/索引列) 或 LIMIT 子句(或兩者皆有)。WHERE 條件使用鍵 且 LIMIT 子句。| 表結構 | 語句 | sql_safe_updates=1 結果 |
|---|---|---|
| 有主鍵 id | UPDATE t SET c=1 WHERE id=5 | ✅ 允許(WHERE 用主鍵) |
| 有主鍵 id | UPDATE t SET c=1 WHERE name='abc' | ❌ 阻擋(WHERE 用非鍵列) |
| 無任何鍵 | UPDATE t SET c=1 LIMIT 10 | ✅ 允許(有 LIMIT) |
| 有主鍵 id | DELETE FROM t WHERE id=5 | ❌ 阻擋(缺 LIMIT) |
| 有主鍵 id | DELETE FROM t WHERE id=5 LIMIT 1 | ✅ 允許 |
SET SESSION sql_safe_updates = 1; -- 當前會話生效
SET GLOBAL sql_safe_updates = 1; -- 新連接生效(需 SUPER 權限)
--safe-updates 客戶端啟動參數:mysql 命令行啟動時自動開啟。UPDATE/DELETE,不影響 SELECT/INSERT/REPLACE。LIMIT(如 LIMIT 99999999)。善用 sql_safe_updates,為數據安全加一把「防呆鎖」。