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=?
相关推荐
daidaidaiyu6 小时前
ThingsBoard 集群的核心逻辑源码分析
java
我可能是个假开发7 小时前
FTP Unicode 文件名导致 `550` 的问题分析与解决方案
java·开发语言·spring
caoerzhong7 小时前
中小企业上 WMS 该先上哪几块:JeeWMS 开源 Java 仓库管理系统的分批上线清单
java·python·开源
【JAVA】玩家8 小时前
Spring核心原理全解析:从零到生产实战
java·后端·spring
Wang's Blog8 小时前
Java框架 SpringCloud 快速入门: 实现 Feign 最佳实践(抽取方式)
java·spring cloud
MandalaO_O9 小时前
IDEA 开发(快捷键 + 调试 + 序列化)
java·ide·intellij-idea
xiaoqiMikko10 小时前
JVM 线上排查实战(七):jps 看不见它、jstack 连不上它,可它明明活得好好的
java·jvm
狼爷11 小时前
Rust/Go/Java/Python/PHP 大比拼:负载下后端框架到底差多少?
java·后端·编程语言
念何架构之路11 小时前
zap扩展生态与总结
java·前端·数据库
第七页独白12 小时前
汽车零件厂如何通过 QMS 真正落地 IATF 16949——QMS软件系统:品质检验-内审稽核-8d客诉管理:全星质量管理软件系统
java·前端·数据库