作者:mobiledu2502852625 | 来源:互联网 | 2023-07-25 23:08
本文主要介绍关于大数据,mysql的知识点,对【mysql的锁】和【mysql的锁有几种】有兴趣的朋友可以看下由【HjasnJH】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的数据库相关技术问题
本文主要介绍关于大数据,mysql的知识点,对【mysql的锁】和【mysql的锁有几种】有兴趣的朋友可以看下由【HjasnJH】投稿的技术文章,希望该技术和经验能帮到你解决你所遇的数据库相关技术问题。
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已经持有了表的意向排他锁,所以就知道了至少有事务持有了表锁或者行锁,就无需再检测行锁,这就是意向锁的作用。
注意,意向锁只会与表级的排他锁/共享锁有互斥关系,跟行级的排他锁/共享锁之间没有互斥关系。
本文《mysql的锁》版权归HjasnJH所有,引用mysql的锁需遵循CC 4.0 BY-SA版权协议。