文章目录
- 1、RC隔离级别下,在事务中每一次执行快照读时生成ReadView
- 2、先来看第一次快照读具体的读取过程:
- 3、再来看第二次快照读具体的读取过程:
1、RC隔离级别下,在事务中每一次执行快照读时生成ReadView
我们就来分析事务5中,两次快照读读取数据,是如何获取数据的?
在事务5中,查询了两次id为30的记录,由于隔离级别为Read Committed,所以每一次进行快照读
 都会生成一个ReadView,那么两次生成的ReadView如下。

 那么这两次快照读在获取数据时,就需要根据所生成的ReadView以及ReadView的版本链访问规则,到undolog版本链中匹配数据,最终决定此次快照读返回的数据。

2、先来看第一次快照读具体的读取过程:

 在进行匹配时,会从undo log的版本链,从上到下进行挨个匹配:
- 先匹配
这条记录,这条记录对应的
trx_id为4,也就是将4带入右侧的匹配规则中。 ①不满足 ②不满足 ③不满足 ④也不满足 ,都不满足,则继续匹配undo log版本链的下一条。
- 再匹配第二条
,这条记录对应的trx_id为3,也就是将3带入右侧的匹配规则中。①不满足 ②不满足 ③不满足 ④也不满足 ,都不满足,则继续匹配undo log版本链的下一条。
- 再匹配第三条
,这条记录对应的trx_id为2,也就是将2带入右侧的匹配规则中。①不满足②满足终止匹配,此次快照读,返回的数据就是版本链中记录的这条数据。
3、再来看第二次快照读具体的读取过程:

 在进行匹配时,会从undo log的版本链,从上到下进行挨个匹配:
- 先匹配
这条记录,这条记录对应的trx_id为4,也就是将4带入右侧的匹配规则中。 ①不满足 ②不满足 ③不满足 ④也不满足 ,都不满足,则继续匹配undo log版本链的下一条。
- 再匹配第二条
,这条
记录对应的trx_id为3,也就是将3带入右侧的匹配规则中。①不满足②满足。终止匹配,此次快照读,返回的数据就是版本链中记录的这条数据。



