MYSQL-MYSQL中各种锁

为了方便以后复习和详细讲解,先把遇到的各种锁做个简单的记录和描述

话不多说先上图

在这里插入图片描述

我们听说过读锁、写锁、共享锁、互斥锁、行锁等等各种名词,简单对这些锁进行了分类

在这里插入图片描述

在这里插入图片描述
加锁机制:

1、乐观锁:先修改,保存时判断是够被更新过,应用级别

2、悲观锁:先获取锁,再操作修改,数据库级别

锁粒度:

表级锁:开销小,加锁快,粒度大,锁冲突概率大,并发度低,适用于读多写少的情况。

页级锁:BDB存储引擎

行级锁:Innodb存储引擎,默认选项

兼容性:

S锁,也叫做读锁、共享锁,对应于我们常用的 select * from users where id =1 lock in share mode

X锁,也叫做写锁、排它锁、独占锁、互斥锁,对应对于select * from users where id =1 for update
在这里插入图片描述
意向锁( Intention Locks ):

InnoDB为了支持多粒度(表锁与行锁)的锁并存,引入意向锁。意向锁是表级锁,

IS: 意向共享锁

IX: 意向排他锁

事务在请求某一行的S锁和X锁前,需要先获得对应表的IS、IX锁。

意向锁产生的主要目的是为了处理行锁和表锁之间的冲突,用于表明“某个事务正在某一行上持有了锁,或者准备去持有锁”。比如,表中的某一行上加了X锁,就不能对这张表加X锁。

如果不在表上加意向锁,对表加锁的时候,都要去检查表中的某一行上是否加有行锁,多麻烦。

插入意向锁(Insert Intention Lock):

Gap Lock中存在一种插入意向锁,在insert操作时产生。

有两个作用:

和next-key互斥,阻塞next-key 锁,防止插入数据,这样就不会幻读。

插入意向锁互相是兼容的,允许相同间隙、不同数据的并发插入
在这里插入图片描述

锁模式

记录锁:单行记录上的锁,行锁是加在索引上的。

间隙锁:锁定记录之间的范围,但不包含记录本身。

Next Key Lock: 记录锁+ 间隙锁,锁定一个范围,包含记录本身。

猜你喜欢

转载自blog.csdn.net/magentodaddy/article/details/108581130