您的当前位置:首页 >数据库 >MySQL数据库锁:Record Lock, Gap Lock 和 Next-Key Lock 正文
时间:2025-11-04 16:53:24 来源:网络整理编辑:数据库
InnoDB引擎 在共享锁和排他锁文章中,我们详细分析了共享锁和排他锁在MySQL中是如何工作的,今天,我们接着分析InnoDB引擎的 3种行锁。在MySQL的InnoDB引擎的行锁主要有三类:Rec
InnoDB引擎 在 共享锁和排他锁 文章中,数锁我们详细分析了共享锁和排他锁在MySQL中是据库如何工作的,今天,数锁我们接着分析InnoDB引擎的据库 3种行锁。
在MySQL的数锁InnoDB引擎的行锁主要有三类:
Record Lock:记录锁,是据库在索引记录上加锁;Gap Lock:间隙锁,锁定一个范围,数锁但不包含记录;Next-key Lock:Next-key Lock = Gap Lock + Record Lock,据库它锁定了一个范围(Gap Lock实现),数锁并且锁定记录本身(Record Lock实现)
Record Lock,记录锁,据库它是数锁针对索引记录的锁,锁定的据库总是索引记录。在多用户数据库系统中,数锁多个事务可能会同时尝试读取或修改同一条记录,Record Lock确保只有一个事务能在某一时刻修改该记录,其他事务只能读取,或者在写锁释放后再进行修改。
2.举例说明为了更好的说明Record Lock,我们以下面的顺序执行流来进行验证:

示例执行结果如下图:

通过上面的站群服务器示例可以看出:
事务A(sessionA)对id=1加排他锁之后产生了记录锁事务B(sessionB)对id=1的update操作被阻塞了事务C(sessionC)可以查看到Record LockGap Lock,间隙锁,它是一种行级锁,锁住两个索引记录之间的间隙,而不是实际的数据记录,由InnoDB隐式添加。
如下图:(1,3) 表示锁住记录1 和记录3 之间的间隙,这样记录2 就无法插入,间隙可能跨越单个索引值、多个索引值,甚至是空。

在InnoDB中,间隙锁是通过索引来实现的。这意味着间隙锁只能作用于索引,而不能直接作用于非索引列。当一个事务对某个索引列上的间隙加锁时,其他事务就无法在这个间隙中插入新的记录。
2.举例说明为了更好的说明Gap Lock间隙锁,我们以下面的云服务器顺序执行流来进行验证:

示例执行结果如下图:

通过上面的示例执行结果可以看出:
事务A(sessionA)在加共享锁的时候产生了间隙锁(Gap Lock)事务B(sessionB)对间隙中进行insert/update操作,需要先获取排他锁(X),导致阻塞事务C(sessionC)通过show engine innodb status\G指令可以查看到间隙锁的存在。需要说明,间隙锁只是锁住间隙内部的范围,在间隙外的insert/update操作不会受影响。
Next-Key Lock,称为临键锁,它是Record Lock + Gap Lock的组合,用来锁定一个范围,并且锁定记录本身锁,它是一种左开右闭的范围,可以用符号表示为:(a,b]。如下图:

为了更好的说明Next-Key Lock,我们以下面的顺序执行流来进行验证:

示例执行结果如下图:

通过上面的示例执行结果可以看出:
事务A(sessionA)在加共享锁的时候产生了间隙锁(Gap Lock)事务B(sessionB)对间隙中进行insert操作,需要先获取排他锁(X),导致阻塞。高防服务器事务C(sessionC)对间隙中进行update操作,需要先获取排他锁(X),导致阻塞。事务D(sessionD)通过show engine innodb status\G指令可以查看到间隙锁的存在。需要说明的,间隙锁只是锁住间隙内部的范围,在间隙外的insert/update操作不会受影响。Record Lock,Gap Lock和Gap Lock 3种锁是存在MySQL的InnoDB引擎的行锁,MyISAM引擎没有:
Record Lock:记录锁,是在索引记录上加锁;Gap Lock:间隙锁,锁定一个范围,但不包含记录,即(A,B);Next-key Lock:Next-key Lock = Gap Lock + Record Lock,它锁定了一个范围(Gap Lock实现),并且锁定记录本身(Record Lock实现),即(A,B];;这 3种锁都是InnoDB引擎隐式添加的,目的是为了解决可重复读隔离级别下幻读的现象。
将电脑内存条改成U盘的详细教程(简单快速地将电脑内存条改装成U盘的方法)2025-11-04 16:39
联想XPU盘系统重装Win7系统教程(简单易懂的步骤让您轻松重装Win7系统)2025-11-04 16:30
飞科剃须刀FS330的使用体验(轻松拥有舒适须后体验)2025-11-04 16:23
使用U盘安装原版ISO系统的简易教程(一步步教你如何使用U盘轻松安装原版ISO系统)2025-11-04 16:18
电脑显示文件大小错误的原因及解决方法(解析文件大小显示错误的常见问题及应对措施)2025-11-04 16:15
电脑黑屏如何重装系统教程(解决电脑黑屏问题,重新安装操作系统的步骤和注意事项)2025-11-04 16:07
使用MacU盘制作系统的教程软件推荐(一键制作Mac系统安装盘,让安装更便捷)2025-11-04 15:36
KMS8.1使用教程(使用KMS8.1工具轻松激活您的Windows8.1系统)2025-11-04 15:15
密码错误的原因及解决方法(电脑密码错误可能的原因和应对办法)2025-11-04 15:00
天意2016U盘维护系统教程(简单易用的系统维护工具,轻松提升电脑性能)2025-11-04 14:44
电脑音频抽帧教程(实用技巧与工具,让音频编辑更专业化)2025-11-04 16:44
创天卡盟(以创天卡盟怎么样为例,探索其在信用卡市场中的影响力与创新力)2025-11-04 16:26
融合机(实现人机融合的关键技术和应用前景)2025-11-04 16:10
如何使用U盘启动安装系统(详细教程帮你轻松操作,让安装系统变得简单易行)2025-11-04 15:54
全面指南(简单易懂的制作教程,让您轻松驾驭U盘系统驱动盘)2025-11-04 15:40
如何修复电脑无法识别坏了的优盘(解决电脑无法识别损坏的USB设备的方法)2025-11-04 15:39
苹果手机激活使用方法(一步步教你如何激活和使用苹果手机)2025-11-04 15:03
Mac装机教程(一步步教你如何选择硬件和安装系统,让你的Mac与众不同)2025-11-04 15:02
小米Note搭载MIUI8,为你带来怎样的使用体验?(深度探析MIUI8在小米Note上的亮点与优势)2025-11-04 14:12
联想XPU盘系统重装Win7系统教程(简单易懂的步骤让您轻松重装Win7系统)2025-11-04 14:11