MySQL UPDATE 語句乙個「經典」的坑

2022-09-21 09:57:12 字數 677 閱讀 4012

目錄

有人問,比如下圖:

問題歸納起來就是:在mysql裡面update一條記錄,語法都正確的,但記錄並沒有被更新...

剛遇到這個問題的時候,我拿到這條語句直接在測試庫裡面執行了一把,發現確實有問題,但和開發描述的還是 有區別 ,這裡我用測試資料來模擬下:

執行之後的記錄是:

可以看到,結果並不像這位開發同學說的「好像沒有效果」,實際上是有效果的:

why&程式設計客棧#63;

看起來,語法是完全沒有程式設計客棧問題,翻了翻mysql官方文件的update語法:

看到assignment_list的格式是以逗號分隔的col_name=value程式設計客棧列表,一下子豁然開朗,開發同學想要的多字段更新語句應該這樣寫:

倒回去再重試驗一把

果然,這下得到了想要的結果!

小結 :在一條update語句中,如果要更新多個字段,欄位間不能使用「and」,而應該用逗號分隔。

後記 :後面等有空的時候,又回過頭來看了一下,為什麼使用「and」分隔的時候,程式設計客棧會出現owner_code=0的奇怪結果?多次嘗試之後發現:

等價於:

而 ('43212' and owner_name='李四') 是乙個邏輯表示式,而這裡不難知道owner_name並不是『李四'。因此,這個邏輯表示式的結果為 false程式設計客棧 , false在mysql中等價於0!

mySql update容易出錯的乙個地方

update語句的正確語法示例 update tb set col1 value1 col2 value2 col3 value3 where col0 value0 andcol5 value5 上例是正確的做法,不合理的update應該是什麼樣子的呢,是將set後接的並列字段分隔符改為 and ...

MySQL update語句流程總結

廢話不多說先來張 釋 update t set value value 1 where id 2 複製 我想可能大部分人看完這圖,思考片刻,接下來的就不需要在繼續看了,但是考慮到部分朋友還是新手 包括自己 以及後面複習,還是稍微嘮叨一段。首先,上圖中深色背景的表示在執行器中執行,也就是server層...

Mysql Update語句的詳細用法

以下的文章主要介紹的是mysql update 語句的實際用法,我們首先是以單錶的update語句來引出實現mysql update 語句的實際方案,以下就是文章的詳細內容描述,望你看完之後會有收穫。單錶的mysql update語句 update low priority ignore tbl n...