全网最全一篇数据库MVCC详解,不全你打我( 三 )

解决幻读问题

  • 快照读:通过MVCC来进行控制的 , 不用加锁 。按照MVCC中规定的“语法”进行增删改查等操作 , 以避免幻读 。
  • 当前读:通过next-key锁(行锁+gap锁)来解决问题的 。
RC、RR级别下的InnoDB快照读区别
  • 在RR级别下的某个事务的对某条记录的第一次快照读会创建一个快照及Read View ,  将当前系统活跃的其他事务记录起来 , 此后在调用快照读的时候 , 还是使用的是同一个Read View , 所以只要当前事务在其他事务提交更新之前使用过快照读 , 那么之后的快照读使用的都是同一个Read View , 所以对之后的修改不可见;
  • 即RR级别下 , 快照读生成Read View时 , Read View会记录此时所有其他活动事务的快照 , 这些事务的修改对于当前事务都是不可见的 。而早于Read View创建的事务所做的修改均是可见
  • 而在RC级别下的 , 事务中 , 每次快照读都会新生成一个快照和Read View, 这就是我们在RC级别下的事务中可以看到别的事务提交的更新的原因
总结从以上的描述中我们可以看出来 , 所谓的MVCC指的就是在使用READ COMMITTD、REPEATABLE READ这两种隔离级别的事务在执行普通的SEELCT操作时访问记录的版本链的过程 , 这样子可以使不同事务的读-写、写-读操作并发执行 , 从而提升系统性能 。
 
链接:https://juejin.im/post/6871046354018238472
来源:掘金

【全网最全一篇数据库MVCC详解,不全你打我】


推荐阅读