MySQL這樣寫UPDATE語句,勸退

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

update?apps?set?owner_code='43212'?and?owner_name='李四'?where?owner_code='13245'?and?owner_name='張三';執(zhí)行之前的記錄是這樣的:

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

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

update?apps?set?owner_code='43212'?,?owner_name='李四'?where?owner_code='13245'?and?owner_name='張三';
后記:后面等有空的時候,又回過頭來看了一下,為什么使用“AND”分隔的時候,會出現(xiàn)owner_code=0的奇怪結果?多次嘗試之后發(fā)現(xiàn):搜索公眾號互聯(lián)網(wǎng)架構師復“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='張三';評論
圖片
表情
