MySQL ON DUPLICATE KEY UPDATE影响行数

目录

分析为什么Updates返回7

总结


数据库更新日志如下

java 复制代码
insertOrUpdateList|==>  Preparing: INSERT INTO clue_user_tag (vuid, tag_id, tag_type, content) VALUES (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) , (?, ?, ?, ?) ON DUPLICATE KEY UPDATE content = VALUES(content) 
insertOrUpdateList|==> Parameters: 199603942960332807(Long), MI0101(String), org(String), {"buyCount":24,"realAmount":631000.49}(String), 199603942960332807(Long), 8802(String), spu(String), {"latestPurchaseTime":1733760202}(String), 199603942960332807(Long), 9380(String), spu(String), {"latestPurchaseTime":1733760202}(String), 199603942960332807(Long), 4456(String), spu(String), {"latestPurchaseTime":1733760202}(String)
insertOrUpdateList|<==    Updates: 7

可以看到,updateList,大小为4,但是影响行数返回了7

分析为什么Updates返回7

在MyBatis中,<insert>标签的返回值是受影响的行数。对于ON DUPLICATE KEY UPDATE语句,MySQL会返回插入和更新的总行数。具体来说:

  1. 插入操作:
  • 如果一行数据被成功插入,MySQL会返回1。
  • 如果一行数据因为主键冲突而没有被插入,MySQL不会增加返回值。
  1. 更新操作:
  • 如果一行数据因为主键冲突而被更新,MySQL会返回2(1表示插入尝试,1表示更新操作)

在本例中,有4行数据尝试插入,是如下情况:

  • 第1、2、3行数据因为主键冲突而被更新,返回2,
  • 第4行数据被成功插入,返回1。
  • 总的受影响行数为:1 (插入) + 2 (更新) + 2 (更新) + 2 (更新) = 7

因此,Updates返回7表示总共有7个操作被执行,其中包括插入和更新操作。

总结

Updates返回结果表示在执行批量插入或更新操作时,总共有多少个操作被执行。这包括成功插入的行数和因为主键冲突而被更新的行数。具体来说,每次更新操作会被计为2(一次插入尝试和一次更新),而每次成功的插入操作会被计为1。

相关推荐
程序员小崔日记3 小时前
一篇文章彻底搞懂 MySQL 和 Redis:原理、区别、项目用法全解析(建议收藏)
redis·mysql·项目实战
武子康5 小时前
大数据-241 离线数仓 - 实战:电商核心交易数据模型与 MySQL 源表设计(订单/商品/品类/店铺/支付)
大数据·后端·mysql
用户8307196840821 天前
MySQL 查询优化 30 条封神技巧:用好索引,少耗资源,查询快到飞起
mysql
Nyarlathotep01131 天前
事务隔离级别
sql·mysql
Nyarlathotep01131 天前
SQL的事务控制
sql·mysql
用户86178277365181 天前
MySQL 8.0从库宕机排查实录:中继日志膨胀引发的连锁故障复盘
mysql
随风飘的云2 天前
mysql的innodb引擎对可重复读做了那些优化,可以避免幻读
mysql
于眠牧北5 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
Turnip12027 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
加号38 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql