优雅实现・高并发下大量数据乐观锁批量更新(MySQL 最优实践)

面对高并发扣减 / 更新大批量数据防超发 / 防覆盖 核心诉求,基于 MySQL + MyBatis 实现高性能 + 原子性 + 版本号严格控制的乐观锁批量更新,拒绝单行循环、杜绝并发冲突。

xml

复制代码
<update id="batchUpdateByVersion">
    UPDATE biz_table t
    INNER JOIN (
        <foreach collection="list" item="item" separator=" UNION ALL ">
            SELECT
                #{item.id} AS id,
                #{item.version} AS old_ver,
                #{item.num} AS target_num
        </foreach>
    ) v ON t.id = v.id AND t.version = v.old_ver
    SET 
        t.biz_num = v.target_num,
        t.version = t.version + 1
    WHERE t.deleted = 0 AND t.biz_id = #{bizId}
</update>

核心优势

  1. 性能优势 摒弃 for 循环单行 update,单 SQL 完成批量更新,大幅减少数据库交互、事务与网络损耗,千级条目毫秒执行。
  2. 乐观锁并发保障 关联条件绑定版本号相等,仅当前版本匹配才执行更新;更新成功自动version+1,并发争抢时后到请求因版本不匹配更新失败,杜绝超扣、数据覆盖。
  3. 原子性 MySQL 单 UPDATE 语句原子执行,要么全部命中更新、要么对应行跳过,无部分更新脏数据。

补充说明

  • 返回值:受影响行数 = 实际版本匹配成功的数据条数,业务可根据返回值判断部分失败、做重试处理;
  • 适用场景:库存扣减、装箱数量变更等大批量、高并发数据变更场景。
复制代码
相关推荐
TG_yunshuguoji2 小时前
腾讯云代理商:腾讯云CloudBase数据库操作全解析
数据库·人工智能·云计算·腾讯云·cloudbase
运维行者_2 小时前
通过Applications Manager的TCP监控确保无缝网络连接
运维·服务器·网络·数据库·人工智能
j7~2 小时前
【MYSQL】视图--详解
数据库·mysql·视图的定义·视图的基本使用·视图的规则和限制
我是一颗柠檬2 小时前
【Redis】主从复制Day9
java·数据库·redis·后端
Wenzar_2 小时前
GeoHash+Redis Streams实时围栏系统实战
java·数据库·redis·junit
侯盛鑫2 小时前
理解 RocksDB IngestExternalFile
数据库·后端
ECT-OS-JiuHuaShan2 小时前
辩证函数,渡劫代谢:时势造英雄,英雄发神经
数据库·人工智能·机器学习
Mr.朱鹏2 小时前
基于 postgres_fdw 的跨库查询方案
java·数据库·spring boot·sql·spring·postgresql
Leo.yuan2 小时前
MySQL到Hive数据同步怎么选工具?FineDataLink全链路方案实测
数据库·hive·mysql