Error Code: 1175. You are using safe update mode and you tried to update a table
without a WHERE that uses a KEY column.
To disable safe mode, toggle the option in Preferences -> SQL Editor -> Query Editor and reconnect.
| 值 | 行為限制 | 適用場景 |
|---|---|---|
| 1 (ON) - 默認開啟 | 1. UPDATE/DELETE 必須帶 WHERE 條件。2. WHERE 條件必須包含鍵列 (主鍵、唯一索引、普通索引)。3. LIMIT 子句不豁免。 | 防止誤執行 UPDATE t SET x=1 導致全表修改的「手抖」保護。 |
| 0 (OFF) | 無限制,允許全表更新/刪除。 | 批量數據清洗、遷移腳本、管理員操作。 |
-- ❌ 報錯 1175:無 WHERE
UPDATE users SET status = 1;
-- ❌ 報錯 1175:WHERE 非鍵列 (name 無索引)
UPDATE users SET status = 1 WHERE name = 'Zhang San';
-- ✅ 通過:WHERE 主鍵
UPDATE users SET status = 1 WHERE id = 100;
-- ✅ 通過:WHERE 唯一索引
UPDATE users SET status = 1 WHERE email = 'a@b.com';
-- ✅ 通過:WHERE 普通索引
UPDATE users SET status = 1 WHERE age > 20; -- age 有索引
SET SESSION SQL_SAFE_UPDATES = 0;
-- 執行危險操作
DELETE FROM logs WHERE created_at < '2023-01-01';
-- 恢復 (可選)
SET SESSION SQL_SAFE_UPDATES = 1;
編輯 my.cnf:
[mysqld]
sql_safe_updates=0
重啟服務。
sessionVariables=SQL_SAFE_UPDATES=0。SET SESSION SQL_SAFE_UPDATES = 0;,尾部恢復。LIMIT 1000 循環執行,減少鎖持有時間、Binlog 體積、回滾代價。WHERE 列有索引,既滿足 Safe Mode,又提升性能。