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=?
相关推荐
wangchunyu1147 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
paopaokaka_luck8 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
Thomas.Sir8 小时前
第9课:SpringBoot4.x Web开发基础:WebMvc自动配置、静态资源、请求参数接收
java·spring boot
程序 代码狂人8 小时前
切片表与分区表的区别(数据开发面试版)
java·大数据·开发语言·数据仓库·算法
2501_944521599 小时前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
南归北隐10 小时前
Spring AI Alibaba Graph框架实现MCP数据库查询实战
java·后端·spring ai·mcp·spring ai mcp
古法老登瞎折腾10 小时前
大数据智能运维实战(九):让 AI 查日志——找到异常,也保留上下文
java·大数据·运维·人工智能·spring ai·mcp
ai大模型-探索者11 小时前
Function Call与MCP(区别、联系与实战)
java·服务器·网络
略略略咯咯11 小时前
啊啊啊啊啊
java·服务器·数据库
SL_staff11 小时前
运维救火实战:钉钉API变更致薪资计算中断,如何用可视化逻辑引擎5分钟热修复
java·开源·全栈