【浅谈mysql间隙锁】

今天突然看到mysql死锁相关的问题,联系到mysql的间隙锁也会导致mysql死锁,所以整理下相关的概念。

1. 什么是间隙锁

在Mysql的InnoDB存储引擎中,间隙锁(Gap Locks)是一种用于防止幻读(Phantom Read)的锁机制。间隙锁锁定的是索引记录之间的间隙(gap),而不是具体的记录。这种锁主要用于防止其他事务在这些间隙中插入新的记录,从而避免产生幻读的问题。

1.1 间隙锁的类型

共享间隙锁(Shared Gap Lock):允许多个事务在同一间隙上持有共享间隙锁,但不允许其他事务在该间隙中插入新记录。
排他间隙锁(Exclusive Gap Lock):不允许其他事务在同一间隙上持有任何类型的锁,也不允许其他事务在该间隙中插入新记录。

1.2 间隙锁工作原理

共享间隙锁是一种读锁,允许多个事务在同一间隙上持有共享锁,但是会阻止其他事务在该间隙中插入新纪录, 即多个事务查询可以,但是其他事务插入新纪录不可以。
当有插入操作时,共享间隙锁会尝试升级成排他间隙锁,成功的条件是没有其他事务持有该间隙锁。

重点提炼

  • 间隙锁锁定的是索引记录之间的间隙,不是记录本身。记录本身加的是记录锁。
  • 间隙锁是为了防止幻读的,和隔离级别有关。(后面会提到)

2. 举例

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值