MST

星途 面试题库

面试题:MySQL可重复读隔离级别下幻读问题与锁的关系

在MySQL的可重复读隔离级别下,从锁的角度分析为什么InnoDB存储引擎能解决幻读问题?阐述其原理以及相关锁机制是如何协同工作的。
10.5万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试
  1. 原理
    • 在可重复读隔离级别下,InnoDB通过MVCC(多版本并发控制)和间隙锁(Next - Key Lock)机制来解决幻读问题。MVCC允许事务在读取数据时,根据版本链获取到符合事务开始时状态的数据快照,这保证了在事务内多次读取相同数据时,读到的数据是一致的。而间隙锁则是为了解决在插入新数据时可能出现的幻读问题。
  2. 相关锁机制协同工作
    • 间隙锁(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在保证数据一致性的同时,尽可能提高系统的并发性能,有效解决了幻读问题。