MySQL 巨坑:update 更新慎用影响行数做判断!!!

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: MySQL 巨坑:update 更新慎用影响行数做判断!!!

业务系统中,使用update语句更新数据是再正常不过的场景,我们也经常通过update更新的行数,来做一些业务判断,类似下面的伪代码:(mybatis + mysql 场景)


if (xxxMapper.updateByPrimaryKeySelective(entity)>0){
   //更新成功,做其它业务处理
}


但是这里有一个坑,mysql中update影响行数>0是有条件的,假如有一张表:


image.png


里面只有一条记录(ID=1),我们用update更新一把ID=1的这条记录


image.png


这一行成功更新,影响行数为1,理所当然,然后把这条update语句再执行一次:


image.png


这时候,返回的影响行数为0,也就是说,当待更新的记录与原始记录旧值相同时,mysql其实并不会做任何更新。。


换言之,如果上游传过来的数据,与数据库本身的旧值相等,没有变化时,update语句影响行数为0。这与另一种场景:"更新一条并不存在的记录,影响行数返回0" 无法区分。


image.png


结论:不要使用update语句的影响行数做重要的业务判断!


相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
4月前
|
SQL 关系型数据库 MySQL
MySQL UPDATE 更新
MySQL UPDATE 更新
|
6月前
|
SQL 关系型数据库 MySQL
总结vue3 的一些知识点:MySQL UPDATE 更新
总结vue3 的一些知识点:MySQL UPDATE 更新
|
2月前
|
SQL 关系型数据库 MySQL
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
49 0
|
6月前
|
SQL Oracle 关系型数据库
【MySQL异常】1093 - You can‘t specify target table ‘daily_job‘ for update in FROM clause
【MySQL异常】1093 - You can‘t specify target table ‘daily_job‘ for update in FROM clause
67 0
|
7月前
|
关系型数据库 MySQL 数据库
对于mysql数据库delect from,truncate table,drop table, update操作的时候如何选择
对于mysql数据库delect from,truncate table,drop table, update操作的时候如何选择
66 2
|
6月前
|
存储 关系型数据库 MySQL
MySQL 中单表数据的最大行数应该控制在多少?
MySQL 中单表数据的最大行数应该控制在多少?
571 1
MySQL 中单表数据的最大行数应该控制在多少?
|
3月前
|
存储 缓存 关系型数据库
MySQL update执行流程到 redo log深入理解
MySQL update执行流程到 redo log深入理解
46 0
|
3月前
|
SQL 关系型数据库 MySQL
MySQL UPDATE 更新
【1月更文挑战第3天】MySQL 使用讲解 第03期
|
9月前
|
关系型数据库 MySQL
【问题处理】—— Mysql : You can‘t specify target table for update in FROM clause
【问题处理】—— Mysql : You can‘t specify target table for update in FROM clause
301 1
|
4月前
|
关系型数据库 MySQL
零基础带你学习MySQL—Update语句以及注意事项(八)
零基础带你学习MySQL—Update语句以及注意事项(八)