优雅实现・高并发下大量数据乐观锁批量更新(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 语句原子执行,要么全部命中更新、要么对应行跳过,无部分更新脏数据。

补充说明

  • 返回值:受影响行数 = 实际版本匹配成功的数据条数,业务可根据返回值判断部分失败、做重试处理;
  • 适用场景:库存扣减、装箱数量变更等大批量、高并发数据变更场景。
复制代码
相关推荐
Data_Journal15 小时前
用于网页抓取的 Node-unblocker
大数据·开发语言·数据库·python·scrapy
涤生大数据15 小时前
一次“没有运行日志”的DolphinScheduler任务失败排查
大数据·数据库·人工智能·状态模式
专注API从业者16 小时前
告别人工盯品!借助 Open Claw 搭建电商商品自动化监控与数据分析系统(完整可运行源码)
大数据·运维·数据库·数据分析·自动化
viskaz16 小时前
数据库迁移流程学习
数据库
auspicious航17 小时前
PostgreSQL写入慢全攻略:原因排查与性能调优实战
数据库·postgresql
IvorySQL17 小时前
PostgreSQL 日报|逻辑复制行过滤致数据丢失(8 月 21 日)
数据库·postgresql
重生之我是Java开发战士17 小时前
【Java EE】事务与事务的传播机制
数据库·java-ee
润乾软件17 小时前
Trae+SQLazy 编写复杂 SQL 实践
数据库·sql
会编程的吕洞宾18 小时前
Redis大Key拖垮线上?排查定位与治理实战
数据库·redis·bootstrap
呆呆小孩18 小时前
零基础学 MySQL(上):从建库建表到增删改查,一篇搭好 SQL 基础
android·sql·mysql