RR隔离级别
1、一致性视图生成时机
RR级别下面的一致性视图是在第一次读取的时候生成的,之后的查询在当前事务中就不会再生成视图了。继续以中篇的时候的例子来看下。
2、版本控制验证
1、开启两个事务,把隔离级别设置为RR,当然这个是默认的不用你去修改。我电脑出了点问题,就不拿dos窗口操作了,这次使用navicat来开几个窗口看看。
2、开启事务一,二,做设计图中的事务处理。
此时的版本链是:
此时开启第三个事务,隔离级别依然是RC。事务1,2还没有提交。
这个事务没有做操作,所以他的trx_id就是0。
我们来查询一下这个id=1的数据,然后看看mvcc的表现。注意此时事务1,2都还没有提交。
因为事务三只做了查询,此时他的事务号就是0,在此时他开启事务做查询那一刻生成一致性视图,此时这个一致性视图的属性值分别是:
1、m_ids:[2795535,2795537]
2、min_trx_id:2795535
3、max_trx_id:2795538
4、creator_trx_id:0
此时他开始从id=1的这个数据此时的版本链开始遍历。
首先先看到的第一个数据是内马尔,他的事务id是535,这个是在m_ids里面的,所以是活跃事务,不可见。
接着往下走到苏牙,537也是在里面,所以不可见。
接着往下走到梅西,这个事务是95,小于min_trx_id,所以可见所以读到的就是梅西。
分析过程还是一样的,只不过他的视图你下次再查还是刚才的视图了,具体可以做下分析。
3、设计分析
因为每次读取最开始的一致性视图,所以他每次读取,活跃事务的集合都是不变的。在第一篇中的六个规则之下,他会走一样的查询结果,所以每次读取都是一样的,所以在RR下不会有不可重复读的问题。
第三篇没写好,还是发了,后面会加一些分析场景在里面,补充完整那六条规则的使用场景。