面试题答案
一键面试- 原理:
- 在可重复读隔离级别下,InnoDB通过MVCC(多版本并发控制)和间隙锁(Next - Key Lock)机制来解决幻读问题。MVCC允许事务在读取数据时,根据版本链获取到符合事务开始时状态的数据快照,这保证了在事务内多次读取相同数据时,读到的数据是一致的。而间隙锁则是为了解决在插入新数据时可能出现的幻读问题。
- 相关锁机制协同工作:
- 间隙锁(Next - Key Lock):
- Next - Key Lock是行锁(Record Lock)和间隙锁(Gap Lock)的组合。行锁锁定的是索引记录,而间隙锁锁定的是索引记录之间的间隙。
- 例如,表中有数据记录的索引值为1、3、5。当一个事务对索引值为3的记录加锁时,使用Next - Key Lock会同时锁定索引值3本身(行锁)以及(1, 3)和(3, 5)这两个间隙(间隙锁)。
- 当另一个事务试图在被锁定的间隙中插入新数据时,会被阻塞。比如要插入索引值为2或4的数据,就会因为间隙锁的存在而等待,直到持有锁的事务提交或回滚,从而防止了幻读的发生。
- MVCC与锁机制的配合:
- 读取操作通常使用MVCC,这样可以不加锁快速读取数据,保证读操作的并发性能。
- 而写操作(如插入、更新、删除)会根据具体情况使用不同类型的锁,在可重复读隔离级别下,插入操作可能会触发间隙锁,更新和删除操作可能会使用行锁或Next - Key Lock 。通过MVCC和锁机制的协同工作,InnoDB在保证数据一致性的同时,尽可能提高系统的并发性能,有效解决了幻读问题。
- 间隙锁(Next - Key Lock):