【MySQL修炼篇】从S锁/X锁到Next-Key Lock:MySQL锁机制硬核拆解
予枫个人主页 个人专栏: 《Java 从入门到起飞》《读研码农的干货日常》 Debug 这个世界Return 更好的自己引言线上系统突然报出死锁异常业务数据更新卡住排查半天却连锁的类型都分不清行锁、表锁、间隙锁到底有啥区别S锁和X锁的竞争又是如何引发死锁的作为后端开发者数据库锁机制是绕不开的核心知识点更是保障系统数据一致性和并发性能的关键。本文将从基础锁类型到死锁排查层层拆解MySQL锁机制带你吃透每个核心要点轻松应对线上锁相关问题文章目录引言一、核心锁类型基础S锁与X锁1.1 共享锁S锁读锁不互斥1.2 排他锁X锁写锁全互斥二、粒度区分表锁与行锁2.1 表锁粗粒度锁高效低并发核心特性适用场景2.2 行锁细粒度锁低效高并发核心特性关键注意点三、间隙锁与Next-Key Lock解决幻读的核心3.1 间隙锁Gap Lock锁定区间阻止插入3.2 Next-Key Lock行锁间隙锁的组合四、死锁Deadlock成因、场景与排查4.1 死锁产生的3大核心原因4.2 典型死锁场景示例事务A事务B4.3 死锁排查的4个核心步骤步骤1开启死锁日志永久生效需修改配置文件步骤2实时查看锁状态步骤3分析死锁日志核心信息步骤4优化并规避死锁五、全文总结一、核心锁类型基础S锁与X锁数据库锁的核心目的是解决并发场景下的数据一致性问题而Shared Locks共享锁简称S锁和Exclusive Locks排他锁简称X锁是所有锁机制的基础几乎所有数据库都实现了这两种核心锁类型。1.1 共享锁S锁读锁不互斥共享锁的核心特质多个事务可以同时持有同一资源的S锁互不干扰但会阻塞X锁的获取。适用场景只读操作比如SELECT * FROM table WHERE id1 LOCK IN SHARE MODE;MySQL中显式加S锁核心规则事务A获取资源R的S锁后其他事务可正常获取R的S锁读-读兼容事务A获取资源R的S锁后其他事务请求R的X锁会被阻塞直至A释放S锁读-写互斥1.2 排他锁X锁写锁全互斥排他锁的核心特质同一资源同一时间只能被一个事务持有X锁既阻塞其他X锁也阻塞S锁。适用场景写操作插入、更新、删除MySQL中默认对写操作加X锁比如UPDATE table SET nametest WHERE id1;核心规则事务A获取资源R的X锁后其他事务请求R的S锁或X锁都会被阻塞写-读、写-写均互斥事务A释放X锁后阻塞的事务才会按优先级依次获取锁资源 小提示这里建议大家点赞收藏后续排查锁问题时先明确是读锁还是写锁的竞争能快速缩小排查范围二、粒度区分表锁与行锁除了S锁和X锁的类型区分按锁定资源的粒度MySQL锁可分为表锁Table Lock和行锁Record Lock两者的锁定范围和适用场景差异极大。2.1 表锁粗粒度锁高效低并发表锁是锁定整个数据表的锁机制是MySQL中最基础、开销最小的锁类型MyISAM存储引擎默认支持表锁InnoDB也支持但不常用。核心特性锁定范围整个数据表无论操作涉及多少行数据加锁方式-- 显式加表级S锁LOCKTABLEStable_nameREAD;-- 显式加表级X锁LOCKTABLEStable_nameWRITE;-- 释放表锁UNLOCKTABLES;优缺点✅ 优点加锁/解锁速度快开销小不会产生死锁❌ 缺点锁定粒度大并发性能差比如事务A更新表中1行数据事务B更新同一表中另一行数据会被阻塞适用场景读多写少的场景如日志查询表批量操作场景如批量导入数据加表锁避免频繁行锁竞争2.2 行锁细粒度锁低效高并发行锁Record Lock是锁定数据表中某一行或多行数据的锁机制仅InnoDB存储引擎支持也是MySQL高并发场景下的核心锁类型。核心特性锁定范围仅涉及的行数据不影响其他行加锁方式无需显式加锁默认通过索引实现重点无索引会升级为表锁-- 写操作默认加行级X锁DELETEFROMtable_nameWHEREid1;-- 读操作显式加行级S锁SELECT*FROMtable_nameWHEREid1FORUPDATE;优缺点✅ 优点锁定粒度小并发性能好多个事务可同时操作同一表中不同行数据❌ 缺点加锁/解锁速度慢开销大可能产生死锁关键注意点划重点行锁的实现依赖索引如果查询条件没有使用索引比如WHERE nametest且name无索引InnoDB会无法定位到具体行此时会将行锁升级为表锁导致并发性能骤降 互动提问你有没有遇到过因无索引导致行锁升级为表锁的问题欢迎在评论区留言分享三、间隙锁与Next-Key Lock解决幻读的核心行锁只能锁定已存在的行数据无法解决幻读问题事务A读取范围内数据事务B插入该范围数据A再次读取出现新数据。为此InnoDB引入了间隙锁Gap Lock和Next-Key Lock两者共同构成了解决幻读的方案。3.1 间隙锁Gap Lock锁定区间阻止插入定义锁定数据行之间的间隙包括行前和行后不锁定行本身核心目的是阻止其他事务在间隙中插入数据适用场景仅在InnoDB的Repeatable Read可重复读隔离级别下生效MySQL默认隔离级别示例假设表中有id为1、3、5的行数据事务A执行SELECT * FROM table WHERE id BETWEEN 1 AND 5 FOR UPDATE;此时会锁定以下间隙(负无穷, 1)(1, 3)(3, 5)(5, 正无穷)事务B尝试插入id2或4的数据时会被间隙锁阻塞3.2 Next-Key Lock行锁间隙锁的组合定义Next-Key Lock 行锁Record Lock 间隙锁Gap Lock既锁定当前行也锁定当前行与下一行之间的间隙核心规则锁定的范围是“左开右闭”区间比如id3的行Next-Key Lock锁定的范围是(1, 3]作用彻底解决幻读问题是InnoDB Repeatable Read隔离级别下的默认锁机制示例表中id1、3、5事务A执行SELECT * FROM table WHERE id3 FOR UPDATE;此时Next-Key Lock锁定的范围是(1, 3]事务B更新id3的数据被行锁阻塞插入id2的数据被间隙锁阻塞四、死锁Deadlock成因、场景与排查死锁是并发系统中最棘手的问题之一当两个或多个事务互相持有对方需要的锁资源且都不主动释放时就会陷入无限等待的死锁状态。4.1 死锁产生的3大核心原因互斥条件资源锁只能被一个事务持有X锁的核心特性持有并等待事务A持有锁1同时等待事务B持有的锁2事务B持有锁2同时等待事务A持有的锁1不可剥夺事务持有锁时其他事务无法强制剥夺该锁只能等待其主动释放循环等待多个事务形成循环等待锁资源的链条比如A等BB等CC等A4.2 典型死锁场景示例假设有user表id为主键两个事务同时执行以下操作事务ABEGIN;-- 持有id1的行级X锁UPDATEuserSETnameAWHEREid1;-- 等待id2的行级X锁UPDATEuserSETnameAWHEREid2;COMMIT;事务BBEGIN;-- 持有id2的行级X锁UPDATEuserSETnameBWHEREid2;-- 等待id1的行级X锁UPDATEuserSETnameBWHEREid1;COMMIT;此时两个事务互相等待对方的锁资源形成死锁MySQL会自动检测到死锁并回滚其中一个事务代价较小的那个。4.3 死锁排查的4个核心步骤步骤1开启死锁日志永久生效需修改配置文件-- 临时开启死锁日志重启MySQL失效SETGLOBALinnodb_print_all_deadlocks1;-- 查看死锁日志位置SHOWVARIABLESLIKEdatadir;死锁日志会记录在MySQL的错误日志中通常是hostname.err文件。步骤2实时查看锁状态-- 查看当前事务持有和等待的锁信息SELECT*FROMinformation_schema.innodb_locks;-- 查看当前事务等待锁的情况SELECT*FROMinformation_schema.innodb_lock_waits;-- 查看当前运行的事务SELECT*FROMinformation_schema.innodb_trx;步骤3分析死锁日志核心信息死锁日志会包含以下关键内容帮助定位问题死锁事务的IDTRX ID每个事务持有和等待的锁类型行锁/表锁、S锁/X锁每个事务执行的SQL语句死锁检测结果和回滚的事务步骤4优化并规避死锁根据排查结果针对性优化核心规避方案统一事务操作顺序所有事务对同一组资源的操作顺序保持一致比如都按id升序操作缩短事务执行时间减少事务中不必要的操作避免长时间持有锁避免批量加锁尽量拆分批量操作避免一次性锁定大量行数据合理设置隔离级别非必要不使用Repeatable Read可降低间隙锁带来的死锁概率加锁前预判对可能产生死锁的场景可通过显式加锁或事务超时设置规避✅ 小技巧这里建议大家收藏本文死锁排查步骤直接套用高效解决线上问题五、全文总结本文从核心锁类型S锁/X锁出发详解了表锁与行锁的粒度差异、适用场景深入剖析了间隙锁与Next-Key Lock解决幻读的底层逻辑最后重点讲解了死锁的成因、典型场景及排查优化方案。掌握数据库锁机制不仅能快速定位线上并发问题更能在系统设计阶段规避潜在风险保障数据一致性和系统高可用性。建议大家结合实际业务场景多练多总结真正吃透锁机制的核心要点

相关新闻

【开题答辩全过程】以 高校学生平时成绩管理系统为例,包含答辩的问题和答案

【开题答辩全过程】以 高校学生平时成绩管理系统为例,包含答辩的问题和答案

个人简介 一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等 开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。 感谢大家…

2026/7/6 6:13:28 阅读更多 →
2026别错过!AI论文软件 千笔ai写作 VS WPS AI,专科生专属神器!

2026别错过!AI论文软件 千笔ai写作 VS WPS AI,专科生专属神器!

随着人工智能技术的迅猛发展,AI辅助写作工具已逐渐成为高校学生完成毕业论文的重要帮手。无论是开题报告、文献综述还是整篇论文撰写,越来越多的学生开始借助AI工具提升效率、降低写作难度。然而,面对市场上种类繁多的AI写作软件,…

2026/7/3 15:31:32 阅读更多 →
YOLO26原创自研 | 一种新颖的跨通道交互的高效率通道注意力EMCA,ECA改进版

YOLO26原创自研 | 一种新颖的跨通道交互的高效率通道注意力EMCA,ECA改进版

💡💡💡本文原创自研创新改进:基于ECA注意力,提出了一种新颖的EMCA注意力(跨通道交互的高效率通道注意力),保持高效轻量级的同时,提升多尺度提取能力 强烈推荐,适合直接使用,paper创新级别 💡💡💡本文改进:1)作为注意力机制分别加入到YOLO26的backbone、…

2026/7/3 15:31:34 阅读更多 →

最新新闻

Monorepo 工程化实战:Turborepo + pnpm 的全栈项目组织与构建缓存

Monorepo 工程化实战:Turborepo + pnpm 的全栈项目组织与构建缓存

Monorepo 工程化实战:Turborepo pnpm 的全栈项目组织与构建缓存 一、多仓库协作的效率黑洞:当你维护 5 个 npm 包时,改一行代码要跑几个 CI 全栈项目的常见组织方式是:前端一个仓库,后端一个仓库,共享类型…

2026/7/7 0:25:32 阅读更多 →
MediaCrawler:5分钟上手,一站式采集小红书、抖音、B站等主流平台数据

MediaCrawler:5分钟上手,一站式采集小红书、抖音、B站等主流平台数据

MediaCrawler:5分钟上手,一站式采集小红书、抖音、B站等主流平台数据 【免费下载链接】MediaCrawler-new 项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new 你是否在为新媒体数据分析而烦恼?想要批量获取小红书、…

2026/7/7 0:23:31 阅读更多 →
免疫平衡的“黄金四象限“:IFN-γ/IL-17/IL-4/TGF-β1 Panel构建Th检测体系

免疫平衡的“黄金四象限“:IFN-γ/IL-17/IL-4/TGF-β1 Panel构建Th检测体系

【行业观察 | 生物标志物高通量检测新进展】Adaptive immunity is a balancing act. 这句话在教科书里躺了几十年,但直到今天,大多数实验室仍然在用"单点测量"的方式去逼近这个动态平衡。测了IFN-γ,不知道IL-4的走向;定…

2026/7/7 0:21:30 阅读更多 →
YOLOv8船舶检测实战:从算法原理到海事场景部署

YOLOv8船舶检测实战:从算法原理到海事场景部署

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 在船舶运输、港口管理和海事安全领域,如何高效、准确地识别和分类航道中的各类船舶,一直是行业智能化升级的核…

2026/7/7 0:21:30 阅读更多 →
132.带限位报警与急停联锁的智能分拣流水线 PLC 设计

132.带限位报警与急停联锁的智能分拣流水线 PLC 设计

摘要 本文围绕可编程逻辑控制器(PLC)的工程化应用,从底层扫描机制出发,系统讲解PLC的核心原理、梯形图与结构化文本的编程范式,并给出一个完整的物料分拣控制系统实战案例。文章包含可直接运行的CODESYS代码(IEC 61131-3标准),详细说明运行逻辑与调试方法,同时梳理初…

2026/7/7 0:15:25 阅读更多 →
移动应用安全测试终极指南:如何用MobSF框架快速发现应用漏洞

移动应用安全测试终极指南:如何用MobSF框架快速发现应用漏洞

移动应用安全测试终极指南:如何用MobSF框架快速发现应用漏洞 【免费下载链接】Mobile-Security-Framework-MobSF Mobile Security Framework (MobSF) is an automated, all-in-one mobile application (Android/iOS/Windows) pen-testing, malware analysis and sec…

2026/7/7 0:15:25 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻