MySQL這樣寫UPDATE語句,勸退
來源:ju.outofmemory.cn/entry/336774
起因
最近,好幾次有開發(fā)同學在釘釘上問我,比如下圖:

問題歸納起來就是:在MySQL里面update一條記錄,語法都正確的,但記錄并沒有被更新…
有問題的SQL語句:
update?apps?set?owner_code='43212'?and?owner_name='李四'?where?owner_code='13245'?and?owner_name='張三';執(zhí)行之前的記錄是這樣的:

執(zhí)行之后的記錄是這樣的:搜索公眾號互聯(lián)網(wǎng)架構(gòu)師復“2T”,送你一份驚喜禮包。

可以看到,結(jié)果并不像這位開發(fā)同學說的“好像沒有效果”,實際上是有效果的:
owner_name的值沒有變,但owner_code變成了0!看起來,語法是完全沒有問題,翻了翻MySQL官方文檔的update語法:

update?apps?set?owner_code='43212'?,?owner_name='李四'?where?owner_code='13245'?and?owner_name='張三';相關(guān)閱讀:2T架構(gòu)師學習資料干貨分享

果然,這下得到了想要的結(jié)果!
小結(jié):在一條UPDATE語句中,如果要更新多個字段,字段間不能使用“AND”,而應該用逗號分隔。
后記:后面等有空的時候,又回過頭來看了一下,為什么使用“AND”分隔的時候,會出現(xiàn)owner_code=0的奇怪結(jié)果?多次嘗試之后發(fā)現(xiàn):搜索公眾號互聯(lián)網(wǎng)架構(gòu)師復“2T”,送你一份驚喜禮包。
update?apps?set?owner_code='43212'?and?owner_name='李四'?where?owner_code='13245'?and?owner_name='張三';等價于:
update?apps?set?owner_code=('43212'?and?owner_name='李四')?where?owner_code='13245'?and?owner_name='張三';全棧架構(gòu)社區(qū)交流群
?「全棧架構(gòu)社區(qū)」建立了讀者架構(gòu)師交流群,大家可以添加小編微信進行加群。歡迎有想法、樂于分享的朋友們一起交流學習。
掃描添加好友邀你進架構(gòu)師群,加我時注明【姓名+公司+職位】看完本文有收獲?請轉(zhuǎn)發(fā)分享給更多人
往期資源:
Java高級 - 分布式系統(tǒng)開發(fā)技術(shù)視頻
評論
圖片
表情
