业务系统中,使用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语句的影响行数做重要的业务判断!

update影响行数使用不当造成的bug的更多相关文章

  1. mysql sql获取上条插入id,update影响行数

    1.获取上条插入数据 LAST_INSERT_ID(); 2.获取update影响行数. ROW_COUNT(); mysql> UPDATE t -> SET address = 'be ...

  2. Oracle sql%rowcount 返回影响行数;sql server @@RowCount返回影响行数

    sql server中,返回影响行数是:If @@RowCount<1 Oracle中,返回影响行数是:If sql%rowcount<1 例: sqlserver: create pro ...

  3. sql%rowcount 返回影响行数

    oracle中.返回影响行数是:If sql%rowcount 举例: update ut_calenderStatus t set t.calenderstatus=pi_flg, t.m=pi_M ...

  4. mysql执行update语句受影响行数是0

    mybatis连接mysql数据库,发现同一个update执行多次,返回的int值都是1. 我记得同样的update再次执行时 受影响行数是0. 后来发现,我之前一直用的SQLyog是这样子的. 原来 ...

  5. CI中获取读操作的结果集行数+获取写操作的影响行数

    本质:读操作,用mysql_num_rows函数,写操作用mysql_affected_rows函数 mysql_num_rows() 返回结果集中行的数目.此命令仅对 SELECT 语句有效.要取得 ...

  6. CodeIgniter2.0中sqlserver驱动返回受影响行数问题解决

    最近使用CI写项目时遇到的问题,当使用sqlserve链接操作时 修改和删除返回的受影响行数不对 解决办法如下: 找到ci框架目录中include\database\drivers\sqlsrv\sq ...

  7. 判断mysqli函数里的sql语句是否有错和影响行数

    <?php $mysqli=@new mysqli("localhost", "root", "123456", "xsph ...

  8. [小问题笔记(八)] 常用SQL(读字段名,改字段名,打印影响行数,添加默认值,查找存储过程等)

    读取所有字段,自然排序 declare @fields varchar(max) Select @fields=ISNULL(@fields,'')++name+',' from syscolumns ...

  9. unidac 执行Execute后取得受影响行数。

    unidac 执行Execute后取得受影响行数. uniQuery2.SQL.Text := mmo2.Text; uniQuery2.Execute; mmo1.Lines.Add(Format( ...

  10. replace into 影响行数

    replace into 影响行数,谈起影响行数,先理解replace into 原理:其是先到表里通过一定规则(单主键或复合主键或唯一索引)找到记录,并且删除,然后在insert into 记录,即 ...

随机推荐

  1. 82.9K star!全平台AI助手神器,一键部署轻松搞定!

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 项目介绍 轻量极速的AI对话平台,支持Web/iOS/Mac/Android多端运行,轻松接 ...

  2. java中堆污染(heap pollution)以及@SafeVarargs注解使用

    什么是堆污染 heap pollution 堆污染发生在使用可变参数(varargs)或泛型时,将不兼容的类型插入到一个泛型对象中.这会导致在运行时尝试访问这些对象时发生 ClassCastExcep ...

  3. Spring Boot 不能加载 tcnative-2.dll 库(Can't load library: tcnative-2.dll)

    Spring Boot 不能加载 tcnative-2.dll 库 本文将介绍怎样解决 Spring Boot 在启动时抛出 "org.apache.tomcat.jni.LibraryNo ...

  4. RabbitMQ队列和消息的优先级

    RabbitMQ队列和消息的优先级 如果队列中的消息很多,需要一部分消息被优先消费,这是可以通过为消息和队列设置优先级来实现. 请注意,消息的优先级是相对于队列的优先级而言的.如果队列的最大优先级是1 ...

  5. 『Plotly实战指南』--在金融数据可视化中的应用(下)

    在金融市场的复杂博弈中,可视化技术如同精密的导航仪. 传统静态图表正在被交互式可视化取代--据Gartner研究,采用动态可视化的投资机构决策效率提升达47%. 本文的目标是探讨如何利用 Plotly ...

  6. Axure RP中后台管理系统通用原型模板元件库

    Axure RP中后台管理系统通用原型方案 v2是一套通用型的中后台信息系统原型方案,可以快速扩展并输出标准美观的中后台产品原型,极大的提升输出效率和节省协作成本.方案中提供了几十套不同风格和结构的系 ...

  7. (dify)如何使用dify自定义知识库【dify外部链接知识库】

    尝试dify自定义知识库 根据官网教程,可以从知识库的右上角外部知识库进行添加外部知识库 前往 "知识库" 页,点击右上角的 "外部知识库 API",轻点 &q ...

  8. 【公众号搬运】React-Native开发鸿蒙NEXT

    .markdown-body { line-height: 1.75; font-weight: 400; font-size: 16px; overflow-x: hidden; color: rg ...

  9. AtCoder Beginner Contest 357-F

    Problem 同步于博客 Problem You are given sequences of length \(N\), \(A=(A_1,A_2,\ldots,A_N)\) and \(B=(B ...

  10. php链式调用

    我们经常在项目中会写到 Mode::find()->where()->orderBy()->limit(); 链式调用,那么它是怎么实现的呢? 昨天看韩天峰大佬的视频,学到了 关键点 ...