前言
在數據庫操作中,如果在update和delete沒有加上where條件,數據將會全部修改。
不只是初識mysql的開發者會遇到這個問題,工作有一定經驗的開發者有時難免也會忘記寫入where條件。
今天,一個同事就發生了這種情況,手抖清空了線上一個table的所有數據(ps:這是要准備刪庫跑路的節奏???)。
在恢復完數據后,為了以后避免失誤造成的數據全部修改或刪除,設置開啟mysql的安全模式。
解決方案
首先查看安全模式是否開啟(OFF關閉,ON打開):
mysql> show variables like 'sql_safe_updates'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | sql_safe_updates | OFF | +------------------+-------+ row in set (0.00 sec)
打開/關閉(global全局生效 ):
set global sql_safe_updates=1;
set global sql_safe_updates=0;
安全模式設置成功后如果再次執行全表update/delete,會報錯
DELETE from m_test error : You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.
總結
如果開啟了安全模式后
update語句必須滿足如下條件之一才能執行成功
1)使用where子句,並且where子句中列必須為prefix索引列
2)使用limit
3)同時使用where子句和limit(此時where子句中列可以不是索引列)
delete語句必須滿足如下條件之一才能執行成功
1)使用where子句,並且where子句中列必須為prefix索引列
2)同時使用where子句和limit(此時where子句中列可以不是索引列)
