MYSQL安全模式"sql_safe_updates"設置update和delete不帶where的操作限制


前言

  在數據庫操作中,如果在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子句中列可以不是索引列)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM