mysql的锁

锁机制用于管理对共享资源的并发访问;用来实现事务的隔离级别

锁类型

共享锁和排他锁都是行级锁;MySQL当中事务采用的是粒度锁;针对表(B+树)、页(B+树叶子
节点)、行(B+树叶子节点当中某一段记录行)三种粒度加锁;

共享锁(S)可理解为读锁

事务读操作加的锁;对某一行加锁;
在 SERIALIZABLE 隔离级别下,默认帮读操作加共享锁;
在 REPEATABLE READ 隔离级别下,需手动加共享锁,可解决幻读问题;
在 READ COMMITTED 隔离级别下,没必要加共享锁,采用的是 MVCC;
在 READ UNCOMMITTED 隔离级别下,既没有加锁也没有使用 MVCC;

排他锁(X)可理解为写锁

事务删除或更新加的锁;对某一行加锁;
在4种隔离级别下,都添加了排他锁,事务提交或事务回滚后释放锁;

意向锁

意向共享锁和意向排他锁都是表级别的锁;

意向锁是一种不与行级锁冲突表级锁,是由存储引擎自己维护的,无法由用户操作。

意向共享锁(IS)

事务有意向对表中的某些行加共享锁

意向排他锁(IX)

事务有意向对表中的某些行加排他锁

各种锁之间的兼容性(特指表锁)

 为什么需要意向锁?

我们可以看出,意向锁的兼容性里面,意向锁之间是相互兼容的,也就是说相互之间不会阻塞对方获取锁。但是我们发现意向锁和其他锁除了意向读锁和读锁是兼容,其他都互斥

 假设情况:事务A获得表1的行排他锁

若:事务B想获得表1的表排他锁,则需要做以下:

1、判断表1是否有事务获得排他锁

2、判断每一行是否有行排他锁

而步骤2很慢,所以,就需要有一种机制,来加速这个过程。

现在的过程是:事务A获取表1的行排他锁之前,同时持有表1的表意向排他锁

若:事务B想获取表1的表排他锁,发现A已经持有了表的意向排他锁,所以就知道了至少有事务持有了表锁或者行锁,就无需再检测行锁,这就是意向锁的作用。

注意,意向锁只会与表级的排他锁/共享锁有互斥关系,跟行级的排他锁/共享锁之间没有互斥关系。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值