MVCC——可重复度(RR)
作者:互联网
可重复度(RR):仅在第一次执行快照时生成ReadView,后续快照复用。(例外:当本次事务两次快照读之间有当前读,那么第二次快照读会重新生成ReadView)
对应的undo log版本链为:
我们来分析一下事务D两次快照读的ReadView:
第一次ReadView:
根据版本链数据访问规则,第一条数据(trx_id = 3)不满足规则;
第二条数据(trx_id = 2)不满足规则;
第三条数据(trx_id = 1)满足 trx_id(1) < min_trx_id(2),说明数据已经提交,可以访问,所以本次查询结果为==“张三”==。
第二次查询复用上次的ReadView
根据版本链数据访问规则,第一条数据(trx_id = 3)不满足规则;
第二条数据(trx_id = 2)不满足规则;
第三条数据(trx_id = 1)满足 trx_id(1) < min_trx_id(2),说明数据已经提交,可以访问,所以本次查询结果为==“张三”==。
总结:RR隔离级别的实现关键点在于后面的快照读会复用之前的ReadView,所以别的事务虽然修改并提交了,但是后面的快照读ReadView中的m_ids中还保留者它的id,并不会消除,导致无法访问。由此我们也可解决幻读问题。
特例:产生幻读情况
当两次快照读之间存在当前读时,ReadView会重新生成,产生幻读。
标签:快照,RR,重复,规则,ReadView,trx,MVCC,数据,id 来源: https://blog.csdn.net/huangkechen/article/details/122865038