mysql中的意向锁

1、一个事务对表中的某一行加了排它锁并且未提交,其他事务想要获得该表的表锁就需要保证:

•当前没有其他事务持有该表的排他锁

•当前没有其他事务持有该表的其中任一行的排它锁

为了检测是否满足第二个条件,就需要在确保users表不存在排它锁的前提下去检测每一行是否存在排它锁,这样的话效率就会很差。因此就出现了意向锁来提高检测互斥的效率。

2、第一个事务获取某一行的排他锁之后其实表中存在两把锁,一把是加在该行上的锁,一把是加在表上的意向排它锁,当其他事务想要获得该表的排他锁时发现已经有事务获得了该表的意向排它锁,那么此次申请该表的排它锁就会失败,而不用一行一行的检测是不是存在某一行被加了锁。

3、意向锁只会和表级的共享锁/排它锁互斥,不会和行级的共享锁/排它锁互斥。具体来讲:共享意向锁和表级共享锁兼容,和标记排它锁互斥;意向排它锁和表级共享锁互斥,和表级排他锁也互斥。

另外,意向锁相互之间是兼容的,即一个事务对表中的一行加锁(同时获得了该表的意向锁),另一个事务可以对该表的另一行加锁,此时同样得到了该表的意向锁。

4、意向锁是由数据库引擎自己维护的,用户无法手动操作意向锁。

参考:

https://juejin.cn/post/6844903666332368909

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值