1. 程式人生 > >Mysql執行更新或刪除操作時不以主鍵作為where條件報錯

Mysql執行更新或刪除操作時不以主鍵作為where條件報錯

問題:

在執行 update prd_property set isdel = 1 where prdid = 211 時,報如下錯誤:

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 and reconnect.

原因:

是因為 Mysql 有個叫 SQL_SAFE_UPDATES 的變數,為了資料庫更新操作的安全性,此值預設為 1。

當 SQL_SAFE_UPDATES = 1 時,
update 語句必須滿足如下條件之一才能執行成功  
1) 使用 where子句,並且 where 子句中列必須為 prefix 索引列  
2) 使用 limit  
3) 同時使用 where子句和 limit (此時 where 子句中列可以不是索引列)  
  
delete 語句必須滿足如下條件之一才能執行成功  
1) 使用 where 子句,並且 where 子句中列必須為 prefix 索引列  
2) 同時使用 where 子句和 limit (此時 where 子句中列可以不是索引列)  

當 SQL_SAFE_UPDATES =0 時,update 和 delete 操作將會順利執行。


 解決:
所以可以先設定SQL_SAFE_UPDATES的值為0,然後再執行更新,例如: set sql_safe_updates=0; update prd_property set isdel = 1 where prdid = 211;執行成功 為了資料庫安全,還是將set sql_safe_updates設回了1,多取一次,用主鍵更新。
參考網址: