什么是安全模式
在mysql中,如果在update和delete沒有加上where條件,數據將會全部修改。不只是初識mysql的開發者會遇到這個問題,工作有一定經驗的工程師難免也會忘記寫入where條件。為了避免失誤造成的數據全部修改和刪除,可開啟mysql的安全模式。
安全模式的開啟:
mysql> show variables like 'sql_safe_updates'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | sql_safe_updates | ON | +------------------+-------+ 1 row in set (0.00 sec)
安全模式的一般報這樣的錯誤:
mysql> update users set status=1; ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
關閉安全模式:
mysql> set sql_safe_updates=1; Query OK, 0 rows affected (0.00 sec) mysql> show variables like 'sql_safe_updates'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | sql_safe_updates | ON | +------------------+-------+ 1 row in set (0.00 sec)
注意,如果生產環境中有必要設置安全模式,一下幾點要明白:
如果設置了sql_safe_updates=1,那么update語句必須滿足如下條件之一才能執行成功
1)使用where子句,並且where子句中列必須為prefix索引列
2)使用limit
3)同時使用where子句和limit(此時where子句中列可以不是索引列)
delete語句必須滿足如下條件之一才能執行成功
1)使用where子句,並且where子句中列必須為prefix索引列
2)同時使用where子句和limit(此時where子句中列可以不是索引列)