2017年5月11日 星期四

[MySQL] safe mode

最近在mariadb 更新後,突然後台程式失效,檢查後發現,所有的DELETE和UPDATE

全都無法使用,錯誤如下:

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



記得在過去我是手動把這個選項關掉的,但是現在公司不允許我關閉這個選項,

所以我們來分析一下SQL_SAFE_UPDATES = 1時,做了什麼事是不被允許的。

1.如果你的UPDATE 或是DELTE 沒有指定where及limit條件,是不允許被執行的。

例如 DELETE  from myTable; 

2.如果你帶了where條件, 但where條件的column指定的不是pk,抱歉一樣不行


假如我有以下資料表 qoo

PK 

sn    name   group 

1      boywhy   chen_family

2     monkey   chen_family

3     google     search

4     ebay         store


我要刪除group為chen_family的話

delete from qoo where group chen_family ; 

也是不被允許的。

但如果你要刪除where sn =1  or sn=2 or sn=3 則是被充許的,因為它是PK。

如果要刪除chen_family的話,其實還是有方法的。

DELETE FROM  qoo where  sn IN (Select sn from (Select sn from qoo as myqoo where `group`='chen_family')tmp)  limit 20;

記得,一定要加limit ,否則是不會被充許執行的,在delete中limit的用途表示,最多刪除幾

筆,例如條件內有一百筆符合,但是limit 10的話只會刪除10筆,所以limit要怎麼下,可能要

考量程式架設設計上,並不是隨便一個數字都可以。


參考資料:

沒有留言:

張貼留言