MySQL RR隔离级别死锁|Gap间隙锁、临键锁,订单并发范围查询死锁根因方案

前言

MySQL可重复读(RR)隔离级别,为了解决幻读问题引入了Next-Key Lock临键锁(记录锁+Gap间隙锁)。Gap锁带来的死锁问题隐蔽,线上偶发,很难复现。

本文基于订单SaaS项目真实故障,拆解并发范围查询加锁导致死锁的完整过程,给出落地解决方案,同时整理其他经典死锁场景。

一、核心概念

  • Next-Key Lock(临键锁) = 记录锁 + Gap间隙锁;RR隔离级别默认开启。
  • 二级索引、范围查询加for update,会触发临键锁。
  • Gap间隙锁是共享锁,多个事务可以同时持有同一个区间的Gap锁,互不阻塞。

二、死锁完整场景

业务场景:两个事务并发执行,根据user_id范围查询订单并更新状态。

sql 复制代码
select * from order where user_id=? for update;
update order set status=?
相关推荐
逆境不可逃1 小时前
Pi Agent 学习笔记:多个工具怎样并行执行
java
Flynt2 小时前
Java 27 升级实测:默认值动得比新特性多,有个老参数会让 JVM 直接起不来
java·jvm·后端
Bs_MoneyMagnet2 小时前
基于springboot+vue的个人健康管理系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·vue3·springboot3·计算机毕业设计
星云API技术支持2 小时前
企业微信二次开发:群权限设置、成员管理与群资料维护的接口组合实践
java·前端·企业微信
niucloud-admin3 小时前
JAVA V6 多商户商城 开发文档——job 计划任务开发
java·python·github
海宇AI4 小时前
零信任架构实战:基于海宇柠檬查出险-登记证构建自动化车抵贷核保网关
java·人工智能·架构·自动化
cfm_29145 小时前
单例模式详解
java
我叫张土豆5 小时前
本体论、DDD、SDD、TDD:AI 编程时代的四层认知栈
java·人工智能
白远山5 小时前
家政服务家政社区派单实战:调度系统架构设计与实现指南
java·开发语言·小程序·架构·需求分析