<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>

          你可能不知道:常見的 update 語句很容易造成Bug

          共 500字,需瀏覽 1分鐘

           ·

          2022-05-24 13:11


          來源:cnblogs.com/yjmyzz/p/13562182.html


          業(yè)務(wù)系統(tǒng)中,使用update語句更新數(shù)據(jù)是再正常不過的場景,我們也經(jīng)常通過update更新的行數(shù),來做一些業(yè)務(wù)判斷,類似下面的偽代碼:(mybatis + mysql 場景)

          if (xxxMapper.updateByPrimaryKeySelective(entity)>0){   //更新成功,做其它業(yè)務(wù)處理}


          但是這里有一個坑,mysql中update影響行數(shù)>0是有條件的,假如有一張表:



          里面只有一條記錄(ID=1),我們用update更新一把ID=1的這條記錄



          這一行成功更新,影響行數(shù)為1,理所當(dāng)然,然后把這條update語句再執(zhí)行一次:



          這時候,返回的影響行數(shù)為0,也就是說,當(dāng)待更新的記錄與原始記錄舊值相同時,mysql其實并不會做任何更新。換言之,如果上游傳過來的數(shù)據(jù),與數(shù)據(jù)庫本身的舊值相等,沒有變化時,update語句影響行數(shù)為0。這與另一種場景:"更新一條并不存在的記錄,影響行數(shù)返回0" 無法區(qū)分。



          結(jié)論:不要使用update語句的影響行數(shù)做重要的業(yè)務(wù)判斷!

          瀏覽 32
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  大香蕉大奶子 | 香蕉久久精品 | 探花爱爱视频网站 | 天天草天天干 | 上海人妻第三次3p |