2023年8月3日发(作者:)
sqlupdate操作数据更新成功,返回的影响⾏数是0 以前使⽤ server, mysql时候,本能以为update操作返回的⾏数能判断对记录的操作结果,除了数据库异常,⼀般确实能反应操作的真实情况,但是,为何却出现update数据更新成功,反⽽返回影响⾏数为0的情况呢?以为可以判断返回值是否⼤于0来判断更新是否成功,但是,下⾯的两种情况均返回0: 1、没有找到需要更新的 ⽐如,我们进⾏的时候,条件是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(或者) 重复请求update操作的时候,如 update test set cid = ‘5244’;执⾏两次的时候发现,update返回影响⾏数为0。但是使⽤mybatis的时候,结果却不是这样的,执⾏两次的时候,发现update返回的影响⾏数始终是1。后⾯跟踪发现,原来mybatis这个第三⽅持久化框架返回来的是被匹配的影响⾏数,所以返回的始终是1,那如果想要以返回的⾏数作为判断结果,需要在mybatis连接数据库的时候加上参数:jdbc:mysql://${}/${}?useAffectedRows=true
2023年8月3日发(作者:)
sqlupdate操作数据更新成功,返回的影响⾏数是0 以前使⽤ server, mysql时候,本能以为update操作返回的⾏数能判断对记录的操作结果,除了数据库异常,⼀般确实能反应操作的真实情况,但是,为何却出现update数据更新成功,反⽽返回影响⾏数为0的情况呢?以为可以判断返回值是否⼤于0来判断更新是否成功,但是,下⾯的两种情况均返回0: 1、没有找到需要更新的 ⽐如,我们进⾏的时候,条件是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(或者) 重复请求update操作的时候,如 update test set cid = ‘5244’;执⾏两次的时候发现,update返回影响⾏数为0。但是使⽤mybatis的时候,结果却不是这样的,执⾏两次的时候,发现update返回的影响⾏数始终是1。后⾯跟踪发现,原来mybatis这个第三⽅持久化框架返回来的是被匹配的影响⾏数,所以返回的始终是1,那如果想要以返回的⾏数作为判断结果,需要在mybatis连接数据库的时候加上参数:jdbc:mysql://${}/${}?useAffectedRows=true
发布评论