<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          MySQL Update語句一個非常經(jīng)典的“坑”

          共 1527字,需瀏覽 4分鐘

           ·

          2021-01-30 10:25

          點擊關(guān)注上方“SQL數(shù)據(jù)庫開發(fā)”,

          設(shè)為“置頂或星標(biāo)”,第一時間送達(dá)干貨

          起因

          最近好幾次有開發(fā)同學(xué)在釘釘上問我,比如下圖:

          問題歸納起來就是:在MySQL里面update一條記錄,語法都正確的,但記錄并沒有被更新…

          結(jié)論

          小結(jié):在一條UPDATE語句中,如果要更新多個字段,字段間不能使用“AND”,而應(yīng)該用逗號分隔。

          現(xiàn)象

          剛遇到這個問題的時候,我拿到這條語句直接在測試庫里面執(zhí)行了一把,發(fā)現(xiàn)確實有問題,但和開發(fā)描述的還是有區(qū)別,這里我用測試數(shù)據(jù)來模擬下:

          有問題的SQL語句:

          update?apps?set?owner_code='43212'?and?owner_name='李四'?where?
          owner_code='13245'?and?owner_name='張三';?


          執(zhí)行之前的記錄是這樣的:

          執(zhí)行之后的記錄是這樣的:

          可以看到,結(jié)果并不像這位開發(fā)同學(xué)說的“好像沒有效果”,實際上是有效果的:

          owner_name的值沒有變,但owner_code變成了0!

          why? 分析

          看起來,語法是完全沒有問題,翻了翻MySQL官方文檔的update語法:

          看到assignment_list的格式是以逗號分隔的col_name=value列表,一下子豁然開朗,開發(fā)同學(xué)想要的多字段更新語句應(yīng)該這樣寫:

          update?apps?set?owner_code='43212'?,?owner_name='李四'?where?
          owner_code='13245'?and?owner_name='張三';??

          倒回去再重試驗一把:

          果然,這下得到了想要的結(jié)果!

          小結(jié):在一條UPDATE語句中,如果要更新多個字段,字段間不能使用“AND”,而應(yīng)該用逗號分隔。

          后記:后面等有空的時候,又回過頭來看了一下,為什么使用“AND”分隔的時候,會出現(xiàn)owner_code=0的奇怪結(jié)果?多次嘗試之后發(fā)現(xiàn):

          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='張三';??

          而(‘43212’ and owner_name=’李四’)是一個邏輯表達(dá)式,而這里不難知道owner_name并不是‘李四’。因此,這個邏輯表達(dá)式的結(jié)果為false,false在MySQL中等價于0!

          作者:朱康

          http://tech.dianwoda.com

          我是岳哥,最后給大家分享我寫的SQL兩件套:《SQL基礎(chǔ)知識第二版》《SQL高級知識第二版》的PDF電子版。里面有各個語法的解釋、大量的實例講解和批注等等,非常通俗易懂,方便大家跟著一起來實操。


          有需要的讀者可以下載學(xué)習(xí),在下面的公眾號「數(shù)據(jù)前線」(非本號)后臺回復(fù)關(guān)鍵字:SQL,就行

          數(shù)據(jù)前線
          ——End——

          后臺回復(fù)關(guān)鍵字:1024,獲取一份精心整理的技術(shù)干貨

          后臺回復(fù)關(guān)鍵字:進(jìn)群,帶你進(jìn)入高手如云的交流群。

          推薦閱讀

          瀏覽 95
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天爽天天爽夜夜爽毛片资源 | 欧美性爱日逼 | 国产精品久久久久久久久久久久久久久久 | 日韩v欧美v | 黄页无码视频 |