起源:cnblogs.com/yjmyzz/p/13562182.html
业务零碎中,应用 update 语句更新数据是再失常不过的场景,咱们也常常通过 update 更新的行数,来做一些业务判断,相似上面的伪代码:(mybatis + mysql 场景)
if (xxxMapper.updateByPrimaryKeySelective(entity)>0){// 更新胜利,做其它业务解决}
然而这里有一个坑,mysql 中 update 影响行数 >0 是有条件的,如果有一张表:
外面只有一条记录(ID=1),咱们用 update 更新一把 ID= 1 的这条记录
这一行胜利更新,影响行数为 1,天经地义,而后把这条 update 语句再执行一次:
这时候,返回的影响行数为 0,也就是说, 当待更新的记录与原始记录旧值雷同时,mysql 其实并不会做任何更新。。
换言之,如果上游传过来的数据,与数据库自身的旧值相等,没有变动时,update 语句影响行数为 0。这与另一种场景:” 更新一条并不存在的记录,影响行数返回 0 ” 无奈辨别。
论断:不要应用 update 语句的影响行数做重要的业务判断!
近期热文举荐:
1.1,000+ 道 Java 面试题及答案整顿 (2022 最新版)
2. 劲爆!Java 协程要来了。。。
3.Spring Boot 2.x 教程,太全了!
4. 别再写满屏的爆爆爆炸类了,试试装璜器模式,这才是优雅的形式!!
5.《Java 开发手册(嵩山版)》最新公布,速速下载!
感觉不错,别忘了顺手点赞 + 转发哦!