mybatis連接mysql數據庫,發現同一個update執行多次,返回的int值都是1。
我記得同樣的update再次執行時 受影響行數是0。
后來發現,我之前一直用的SQLyog是這樣子的。
原來,不同的連接客戶端執行update給出的受影響行數不同。如下是navicat for mysql,JetBrains旗下的DataGrip, 小海豚 sqlyog。
對於再次返回0,網上的資料是,MySQL 為了提升性能,當它發現要執行的修改內容與數據庫中完全一致時,對它而言,此時修改是毫無意義的,反而會消耗一次執行修改的性能,於是它就不再做修改,因而受影響行數就是0。
至於mybatis,網上有說mybatis這個第三方持久化框架返回來的是被匹配的影響行數,所以返回的始終是1,那如果想要以返回的行數作為判斷結果,需要在db連接串里使用useAffectedRows=true,即
jdbc:mysql://127.0.0.1:3306/cn_appoint?characterEncoding=utf-8&useAffectedRows=true
經初步測試,並不起作用,始終返回的還是1。執行select version();查看mysql版本:5.6.29-mycat-1.6-RELEASE-20161028204710-------------------------->【2019-12-9 11:30】有網友回復,所以又測了一下,發現這個useAffectedRows=true是好使的,同樣的update,第一次執行返回1,第二次及之后執行時就會返回0。我是用SpringBoot集成baomidou的MybatisPlus測試的,mysql版本是5.7.28。