mysql connector for java update return matched rows

一直认为mysql更新操作会返回实际修改数量(affected rows), 但是最近在mybatis项目中发现其返回的是匹配数量(matched rows). 不管什么orm框架其底层都是使用mysql官方提供的驱动jar包实现的与数据库的通讯, 所以我们要研究下关于驱动的文档.

mysql client update(官方客户端返回信息很全,既有matched rows又有affected rows, 这也是之前导致我认为返回affected rows的原因.):

76629d7ff73c5ffcf9ce89447e97a750a36.jpg

datagrip update(基于java驱动实现的GUI客户端, 返回matched rows):

0585c1185db7e2b6956a2173e6ee0c565b3.jpg

mysql client for java code(基于java驱动实现的客户端, 返回matched rows):

4b3fdd514cf9b728ecbc1cd84910da68de9.jpg

通过上面的例子分析发现: 针对更新操作,官方命令行客户端返回信息很详细(matched rows与affected rows都会返回),基于官方提供的java驱动实现的客户端更新操作只返回matched rows. 毕竟实现机制不一样, 下面我们找下官方文档证明下.

java api(dml return rows, ddl return 0, 规范没有详细说明执行返回的rows到底是matched rows还是affected rows, 所以各数据库厂商提供的驱动可以自由返回, 有可能mysql返回matched rows而oracle返回affected rows.)

d3f3ff97183abd1d98c3013e742dda00b0a.jpg

mysql connector for java api (详细描述返回matched rows, 直接原因在这里.)

4f5ea88904e7a082fb673b62e4a96dbf2b7.jpg

能不能使mysql client for java返回affected rows呢? 答案是可以的(建立连接时指定useAffectedRows=true就可以了,但是要注意jdbc版本兼容问题、ON DUPLICATE KEY UPDATE问题).

d62626af501ef61e939cf34f1221c854773.jpg

 

经过以上分析, java api规范没有指定更新操作具体返回matched rows还是affected rows, 这个各数据库厂商可以自由返回. mysql驱动实现明确指定默认返回matched rows, 但是给我们提供的配置参数useAffectedRows.

6f5bb00f7725a7257d0b9cae218582c99c0.jpg

实际开发中是返回matched rows好呢? 还是affected rows好呢? 我感觉还是返回affected rows比较好, 毕竟有的业务场景需要在首次更新时触发、批量更新时需要知道具体更新的数量.

转载于:https://my.oschina.net/u/3994285/blog/2244981

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值