一架梯子,一头程序猿,仰望星空!
MySQL性能优化面试题 > 内容正文

MYSQL有几种锁?


问题简答

以默认的Innodb为例,共有7种类型的锁,分别是: 自增锁、共享/排它锁、意向锁、插入意向锁、记录锁、间隙锁、临键锁。

问题详解:

1.自增锁

自增锁用于在插入新行时保证表中的自增值的顺序性,防止多个线程并发插入时自增值相同。它是一种表锁,因为它会锁定整张表。

2.共享/排它锁

共享锁和排它锁用于控制读写操作的并发访问。共享锁允许多个事务并发读取同一行数据,但不允许其他事务并发修改这行数据。排它锁则只允许一个事务进行修改,其他事务不能读取和修改。

3.意向锁

意向锁是一种辅助锁,用于表明一个事务想要在某个数据行上获取什么类型的锁,以协助其他事务在该数据行上获取适当的锁。

4.插入意向锁

插入意向锁是一种特殊的意向锁,用于在插入新行之前获取锁,以确保没有其他事务在这个插入位置上插入了行。

5.记录锁

记录锁用于锁定单个数据行,防止其他事务对其进行修改。当事务A获取了某行的共享锁时,事务B可以继续获取该行的共享锁,但无法获取该行的排它锁,直到事务A释放共享锁。

6.间隙锁

间隙锁用于防止其他事务在间隙中插入新行或更新已有行。它会在记录锁和临键锁之间锁定间隙,以确保其他事务无法插入行或更新行,从而防止不可重复读和幻读问题。

7.临键锁

临键锁是一种特殊的间隙锁,用于锁定一个值在范围内但不存在的行。例如,当事务A插入了一行时,事务B也想插入一行,但在与事务A插入的行具有相同的值时,事务B需要等待临键锁的释放。