update影響行數使用不當造成的bug
阿新 • • 發佈:2020-08-25
業務系統中,使用update語句更新資料是再正常不過的場景,我們也經常通過update更新的行數,來做一些業務判斷,類似下面的虛擬碼:(mybatis + mysql 場景)
if (xxxMapper.updateByPrimaryKeySelective(entity)>0){ //更新成功,做其它業務處理 }
但是這裡有一個坑,mysql中update影響行數>0是有條件的,假如有一張表:
裡面只有一條記錄(ID=1),我們用update更新一把ID=1的這條記錄
這一行成功更新,影響行數為1,理所當然,然後把這條update語句再執行一次:
這時候,返回的影響行數為0,也就是說,當待更新的記錄與原始記錄舊值相同時,mysql其實並不會做任何更新
結論:不要使用update語句的影響行數做重要的業務判斷!