橘子学MYSQL之MVCC(下)

RR隔离级别下,一致性视图在首次读取时生成,并用于后续查询,避免不可重复读。通过版本链和事务ID进行MVCC验证,确保事务在多次读取中看到相同结果,解决不可重复读问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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下不会有不可重复读的问题。

第三篇没写好,还是发了,后面会加一些分析场景在里面,补充完整那六条规则的使用场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值