innodb 快照读,在RR和RC下有何差异?

RC 和 RR

读提交下: 快照读总是可以读取到最新的数据
解决了读脏数据,保证读取到的数据都是已经事务提交了的。
但是会产生“读幻影行”,同一个事务里面,可能两次读取到的数据不一致。

可重复读: 某个事务首次读取的时间为T,后续读取的数据不会读取在T之后写入的记录,以保证数据事务读取到的数据一致,
解决了读脏数据和读幻影行。

例子:
表中有三条记录:
1, shenjian
2, zhangsan
3, lisi

A1: start transaction;
B1: start transaction;
A2: select * from t;
B2: insert into t values (4, wangwu);
A3: select * from t;
B3: commit;
A4: select * from t;

在RR 下A2,A3,A4读取的结果集
A1:1,2,3。A事务的第一次读取,时间T

A2:1,2,3。因为B还没提交

A3:1,2,3。因为B是在T之后提交的,

回答:RC下

(1)A2读到的结果集是{1, 2, 3};

(2)A3读到的结果集也是{1, 2, 3},因为B还没有提交;

(3)A4读到的结果集还是{1, 2, 3, 4},因为事务B已经提交;

事务的开始时间不一样,不会影响“快照读”的结果

RR下,事务在第一个Read操作时,会建立Read View,读取到的和第一次读取到的数据一样
RC下,事务在每次Read操作时,都会建立Read View,读取到的都是提交后的最新数据。

参考:https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651961513&idx=1&sn=e955133cbd87c652d9bcbccad608190e&chksm=bd2d0d758a5a84632046e7c692064b415621ae329426adf77ae03e4a0cc55d662d6d4c543019&scene=21#wechat_redirect

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值