社区
数据库
帖子详情
mysql中的间隙锁和插入意向锁
IfDevilN
2020-03-31 12:21:40
官方说插入意向锁也是一种间隙锁,间隙锁之间是可以兼容的,所以插入意向锁之间确实是可以兼容的,但是为什么普通间隙锁和插入意向锁就是不兼容呢,这不矛盾了?我理解的不对?各位大神求教呀!!!
...全文
512
1
打赏
收藏
mysql中的间隙锁和插入意向锁
官方说插入意向锁也是一种间隙锁,间隙锁之间是可以兼容的,所以插入意向锁之间确实是可以兼容的,但是为什么普通间隙锁和插入意向锁就是不兼容呢,这不矛盾了?我理解的不对?各位大神求教呀!!!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
IfDevilN
2020-03-31
打赏
举报
回复
求大佬解惑!!!
【
mysql
】锁机制 - 4.
插入
意向锁
假设存在两条值分别为 4 和 7 的记录,两个不同的事务分别试图
插入
值为 5 和 6 的两条记录,每个事务在获取
插入
行上独占的(排他)锁前,都会获取(4,7)之间的
间隙锁
,但是因为数据行之间并不冲突,所以两个事务之间并不会产生冲突(阻塞等待)。Time2:事务2获得了意向排他锁和 (20, 30) 范围的
间隙锁
(
意向锁
和
意向锁
之间不会冲突,
间隙锁
和
间隙锁
之间也不会冲突)
插入
意向锁
和
间隙锁
不能共存,即:两个事务不能在同一时间内,一个拥有
间隙锁
,另一个拥有该间隙的
插入
意向锁
。等待20-30记录的
插入
意向锁
。
MySQL
隐式锁和
插入
意向锁
当事物需要加锁时,如果这个锁不可能发生冲突,InnoDB会跳过加锁环节,这种机制称为隐式锁。隐式锁时InnoDB实现的延时加锁机制,只有当可能会产生冲突的时候才会加锁,减少锁的数量,提高系统的性能。在Insert过程
中
不加锁,遇到特殊情况,将隐式锁转为显示锁。
插入
意向锁
时特殊的
间隙锁
,不同于
间隙锁
的是,该锁只用于并发操作。尽管属于
间隙锁
,但是两个事物不能在同一时间一个拥有
间隙锁
一个拥有
插入
意向锁
(两个有相同的区间)
Mysql
死锁案例3-
间隙锁
与意向
插入
锁冲突
(16, 16,16)换成(3,3,3)即
插入
数据行的下一条记录有锁,但c=5这个记录锁是事务1加的,与事务1的意向
插入
锁不冲突,也是隐式锁。同一个事务持有 gap lock (临键锁也一样)的前提下
插入
数据,会发生锁分裂:执行T1,加锁情况是普通索引c临键锁(0,5]和
间隙锁
(5,10)写锁成功,加id=5主键记录锁写锁成功,共3把锁。执行T2,锁分裂,加锁情况成了(0,3)(3,5]和(5,10)以及主键id=5的记录锁。事务1持有(0,5)
间隙锁
写锁,事务申请(0,5)意向
插入
锁阻塞。
MySQL
| 行锁——记录锁、
间隙锁
、临键锁、
插入
意向锁
MySQL
| 行锁——记录锁、
间隙锁
、临键锁、
插入
意向锁
07_
插入
意向锁
插入
意向锁
是 InnoDB 存储引擎在处理行级锁定时使用的一种特殊类型的锁(特殊的
间隙锁
),主要用于管理
间隙锁
(Gap Lock)和行锁(Record Lock)之间的兼容性。它是一种优化机制,使得多个事务能够同时
插入
同一个间隙(Gap)
中
的不同位置,而不会彼此阻塞。
插入
意向锁
允许多个事务在同一个间隙
中
插入
不同位置的记录,从而提高并发性能。加锁流程包括查找
插入
位置、申请
插入
意向锁
、检查锁冲突以及执行
插入
操作。在同一个间隙
中
的
插入
意向锁
是兼容的,这意味着多个事务可以在同一个间隙
中
插入
记录而不会相互阻塞。
数据库
4,017
社区成员
39,807
社区内容
发帖
与我相关
我的任务
数据库
VC/MFC 数据库
复制链接
扫一扫
分享
社区描述
VC/MFC 数据库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章