顯示具有 My SQL 標籤的文章。 顯示所有文章
顯示具有 My SQL 標籤的文章。 顯示所有文章

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要怎麼下,可能要

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


參考資料:

2016年12月28日 星期三

[My SQL] 計算同一列幾個欄位加總

我有一個資料表的內容如下











































我想要列出以下結果




















也就是把a,b,c,d四個欄位加總 ,透過以下語法來達成


select name ,  (a+b+c+d) as total from test2

最神奇的是,我的欄位資料型態全都是VARCHAR
















2016年12月12日 星期一

「My SQL] group_concat()

最近遇到一個SQL的難題,幸好網路上有好心人分享 group_concat() 這個函式。


我有一個skill資料表,紀錄姓名與技能






































我想要整理一下,以姓名排列,然候變成

bert    java , C# , android

jason SQL,VB

wang  IT

語法如下


SELECT name , group_concat(skills) FROM testdb.skill group by name;

執行結果



















參考資料:

如何將多行查詢結果合併成單一字串? 

http://www.programmer-club.com.tw/ShowSameTitleN/mysql/1320.html