1.全局锁

image.png
image.png
image.png

2.表级锁

2.1.表锁

image.png
image.png

2.2.元数据锁

image.png
image.png

2.3.意向锁

为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行 数据是否加锁,使用意向锁来减少表锁的检查。
image.png
image.png
image.png

3.行级锁

3.1.行锁

image.png
image.png
image.png

3.2.间隙锁&临键锁

image.png

注意:间隙锁唯一目的是防止其他事务插入间隙。间隙锁可以共存,一个事务采用的间隙锁不会 阻止另一个事务在同一间隙上采用间隙锁。

A. 索引上的等值查询(唯一索引),给不存在的记录加锁时, 优化为间隙锁 。
image.png
B. 索引上的等值查询(非唯一普通索引),向右遍历时最后一个值不满足查询需求时,next-key lock 退化为间隙锁。
image.png
C. 索引上的范围查询(唯一索引)—会访问到不满足条件的第一个值为止
image.png