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会重新生成,产生幻读。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MVCC(多版本并发控制)是一种用于解决并发读写冲突的机制。在MVCC中,数据库会为每个事务创建一个快照,该快照是事务开始时数据库中数据的一个副本。因此,在可重复读隔离级别下,MVCC通过使用快照读来解决可重复读的问题。 在可重复读中,多个事务同时读取同一行数据时,MVCC会根据每个事务开始时的快照来提供一致性视图。这意味着,如果一个事务正在读取数据,并且另一个事务正在修改相同的数据,那么读取操作将返回事务开始时的数据快照,而不会受到其他事务的修改的影响。 具体来说,MVCC通过在每个数据行中保存多个版本的数据来实现可重复读。当一个事务开始时,它会创建一个读取快照,并且只能看到在该快照之前已经提交的数据版本。如果其他事务正在修改相同的数据行,那么这些修改将被保存在新的数据版本中,而不影响当前事务的读取操作。 因此,MVCC通过使用快照读和当前读的组合来实现可重复读。快照读提供了一致性的数据视图,而当前读则用于读取最新的数据,并在写操作之前读取数据。 总之,MVCC通过使用快照读和多个数据版本来解决可重复读的问题,确保事务在读取数据时不会受到其他并发事务的修改的干扰。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [MySQL(五)—MVCC解决可重复读的幻读了吗?](https://blog.csdn.net/shang_0122/article/details/120298810)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [详解MySQL是如何解决幻读的](https://download.csdn.net/download/weixin_38730767/13699659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值