sql update操作数据更新成功,返回的影响行数是0

16 篇文章 0 订阅
14 篇文章 0 订阅

sql update操作数据更新成功,返回的影响行数是0

2017年06月24日 10:32:16 浪子艳少 阅读数:24773 标签: udpate 影响行数 更多

个人分类: 数据库

版权声明:本文为博主原创文章,转载请附上此文章的链接。 https://blog.csdn.net/win7system/article/details/73658270

       
       以前使用sql server, mysql时候,本能以为update操作返回的行数能判断对记录的操作结果,除了数据库异常,一般确实能反应操作的真实情况,但是,为何却出现update数据更新成功,反而返回影响行数为0的情况呢?
以为可以判断返回值是否大于0来判断更新是否成功,但是,下面的两种情况均返回0:
       1、没有找到需要更新的数据
             比如,我们进行update的时候,条件是id=5,但是id=5的数据不存在。这种情况下,更新是失败的,返回0,很正确;
       2、要更新的数据和更新的值是完全一样的
             比如,我们要对id=5的记录进行更新,把title变成hello。虽然这条记录存在,但是这条记录的title本来就是hello,那么,返回值也是0;
       3、本身写的sql语句有问题
             比如,update test set cid = ‘5244’ where cid is null or cid=‘’;
       第一种情况可以快分析到,但是调查发现不是这种问题,第二种和第三种为啥会出现这样的问题呢? 调查日志发现,同一时间接受到了两条数据导致了二三的出现,所以,大家在碰到这样的问题的时候,看看是不是因为并发请求导致的。控制好自己的并发事物,不然就会怀疑update的这个操作喽~

重大补充:最近发现update操作使用返回的的影响行数来判断操作成功与否,有时候还与第三方持久化框架有关
       使用原生的sql(或者mysql) 重复请求update操作的时候,如 update test set cid = ‘5244’;执行两次的时候发现,update返回影响行数为0。但是使用mybatis的时候,结果却不是这样的,执行两次的时候,发现update返回的影响行数始终是1。后面跟踪发现,原来mybatis这个第三方持久化框架返回来的是被匹配的影响行数,所以返回的始终是1,那如果想要以返回的行数作为判断结果,需要在mybatis连接数据库的时候加上参数:jdbc:mysql://${jdbc.host}/${jdbc.db}?useAffectedRows=true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值