MST

星途 面试题库

面试题:MySQL事务隔离级别之中等难度

请简述MySQL中可重复读(Repeatable Read)隔离级别解决了哪些并发问题,又是如何解决幻读问题的?
16.4万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

解决的并发问题

  1. 脏读:在可重复读隔离级别下,一个事务不会读到另一个未提交事务修改的数据,因为未提交事务的修改对其他事务不可见,从而避免了脏读。
  2. 不可重复读:在可重复读隔离级别中,事务在执行过程中多次读取同一数据时,读到的值是一致的。因为事务开始时会创建一个一致性视图,后续读操作都基于这个视图,不受其他事务提交的影响,解决了不可重复读问题。

解决幻读问题

  1. MVCC(多版本并发控制):MySQL的可重复读隔离级别通过MVCC机制来解决幻读问题。事务在执行期间,每次读取数据时,不是直接读取最新版本的数据,而是根据事务开始时的一致性视图来读取。即使其他事务插入了新数据,本事务由于基于特定视图,看不到这些新插入的数据,就不会出现幻读现象。
  2. 间隙锁(Next-Key Lock):除了MVCC,MySQL还使用间隙锁。间隙锁锁定的是索引记录之间的间隙,当一个事务在查询时,会对符合条件的记录以及记录之间的间隙加锁。这样,其他事务就无法在这个间隙中插入新记录,从而防止了幻读的产生。例如,在查询where id between 1 and 10时,不仅会对id为1到10的记录加锁,还会对(0, 1)和(10, +∞)的间隙加锁,避免其他事务在这些间隙插入新记录导致幻读。