【MySQL】ERROR 1175 安全模式UPDATE/DELETE操作失敗

神諭丶發表於2016-08-16
【問題描述】:
在做某些update 或者 delete操作時,會報錯:
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
大致意思是,使用了安全模式下,嘗試使用update(delete)操作表時,沒有在where條件裡寫有key的列。


比如,某張表有兩個欄位,其中col_1為主鍵,以下操作都是被禁止的:
  1. DELETE FROM table_name;
  2. DELETE FROM table_name LIMIT 5;
  3. DELETE FROM table_Name WHERE col_2=0;
  4. UPDATE table_name SET col_1=0;
  5. UPDATE table_name SET col_1=0 WHERE col_2=0;

【解決方案】:
要麼禁用這個安全模式,要麼按要求寫sql即可解決這個問題:


〇 禁用對應安全模式:
實際上是開啟了sql_safe_updates這個引數導致的,可以檢查一下該引數:
  1. mysql> SELECT @@sql_safe_updates;
  2. +--------------------+
  3. | @@sql_safe_updates |
  4. +--------------------+
  5. | 1                  |
  6. +--------------------+
  7. 1 row in set (0.00 sec)
如果臨時禁用,可以直接動態修改會話級別的模式
  1. mysql> SET sql_safe_updates=0;
  2. Query OK, 0 rows affected (0.00 sec)

如果永久修改,則需要在my.cnf中做修改:
[mysql]下的safe-updates引數註釋或者刪掉,重新透過client登入mysql-server即可。



〇 修改sql
sql_safe_updates開啟的情況下,如果需要使用update/delete操作一張表,必須滿足一下條件之一:
在DELETE操作裡:
① 需要在where中寫明有key的列的條件,比如此處可以是WHERE col_1=0;(col_1為主鍵)。
或者

② 需要在where中寫名其他非key列的條件,並且加上limit限制

在UPDATE操作裡:
① 需要指定limit限制
或者
 需要在where中寫明有key的列的條件
或者
 需要在where中寫名其他非key列的條件,並且加上limit限制




作者微信公眾號(持續更新)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29773961/viewspace-2123558/,如需轉載,請註明出處,否則將追究法律責任。

相關文章