文章目录
1、RR隔离级别下,仅在事务中第一次执行快照读时生成ReadView,后续复用该ReadView
而RR 是可重复读,在一个事务中,执行两次相同的select语句,查询到的结果是一样的。
那MySQL是如何做到可重复读的呢? 我们简单分析一下就知道了
我们看到,在RR隔离级别
下,只是在事务中第一次快照读时生成ReadView,后续都是复用该ReadView,那么既然ReadView都一样, ReadView的版本链匹配规则也一样, 那么最终快照读返回的结果也是一样的。
2、总结
所以呢,MVCC的实现原理就是通过 InnoDB表的
隐藏字段
、UndoLog 版本链
、ReadView
来实现的。
而MVCC + 锁
,则实现了事务的隔离性
。
而一致性
则是由redolog
与undolog
保证。
原子性:undo log
一致性:undo log + redo log
隔离性:锁+MVCC
持久性:redo log