当前读和快照读在RR级别下的区别:
表1:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3icKbXVt-1685980262900)(mdpic/3133209-1d04f4bede14f4b5.png)]
表2:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LTgvTq1Z-1685980262901)(mdpic/3133209-ba10316e166babf6.png)]
而在表2这里的顺序中,事务B在事务A提交后的快照读和当前读都是实时的新数据400,这是为什么呢?
所以我们知道事务中快照读的结果是非常依赖该事务首次出现快照读的地方,即某个事务中首次出现快照读的地方非常关键,它有决定该事务后续快照读结果的能力
我们这里测试的是更新,同时删除和更新也是一样的,如果事务B的快照读是在事务A操作之后进行的,事务B的快照读也是能读取到最新的数据的
正是Read View生成时机的不同,从而造成RC,RR级别下快照读的结果的不同
总之在RC隔离级别下,是每个快照读都会生成并获取最新的Read View;而在RR隔离级别下,则是同一个事务中的第一个快照读才会创建Read View, 之后的快照读获取的都是同一个Read View。
MVCC相关问题
当前读和快照读在RR级别下的区别:
表1:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A1e2fThS-1685980266697)(mdpic/3133209-1d04f4bede14f4b5.png)]
表2:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JrphTQ9f-1685980266697)(mdpic/3133209-ba10316e166babf6.png)]
而在表2这里的顺序中,事务B在事务A提交后的快照读和当前读都是实时的新数据400,这是为什么呢?
所以我们知道事务中快照读的结果是非常依赖该事务首次出现快照读的地方,即某个事务中首次出现快照读的地方非常关键,它有决定该事务后续快照读结果的能力
我们这里测试的是更新,同时删除和更新也是一样的,如果事务B的快照读是在事务A操作之后进行的,事务B的快照读也是能读取到最新的数据的
正是Read View生成时机的不同,从而造成RC,RR级别下快照读的结果的不同
总之在RC隔离级别下,是每个快照读都会生成并获取最新的Read View;而在RR隔离级别下,则是同一个事务中的第一个快照读才会创建Read View, 之后的快照读获取的都是同一个Read View。