您现在的位置是:亿华云 > 数据库
InnoDB,快照读,在RR和RC下有何差异?(很多人,以为自己懂了...)
亿华云2025-10-08 23:03:33【数据库】5人已围观
简介什么是快照读(Snapshot Read)?MySQL数据库,InnoDB存储引擎,为了提高并发,使用MVCC机制,在并发事务时,通过读取数据行的历史数据版本,不加锁,来提高并发的一种不

MySQL数据库,InnoDB存储引擎,读R懂为了提高并发,和何差使用MVCC机制,异多在并发事务时,自己通过读取数据行的快照历史数据版本,不加锁,读R懂来提高并发的和何差一种不加锁一致性读(Consistent Nonlocking Read)。
画外音:本文所有讨论基于MySQL-InnoDB。异多
快照读的自己内核原理,详见:《InnoDB并发如此高,快照原因竟然在这?读R懂》
什么是读提交(Read Committed)?
(1)数据库领域,事务隔离级别的和何差一种,简称RC;
(2)它解决“读脏”问题,异多保证读取到的自己数据行都是已提交事务写入的;
(3)它可能存在“读幻影行”问题,同一个事务里,连续相同的read可能读到不同的结果集;
什么是可重复读(Repeated Read)?(1)数据库领域,事务隔离级别的一种,简称RR;
(2)它不但解决“读脏”问题,还部分解决了“读幻影行”问题,同一个事务里,云服务器连续相同的read读到相同的结果集;
在读提交(RC),可重复读(RR)两个不同的事务的隔离级别下,快照读有什么不同呢?我们一起来做一些实验。
假设有InnoDB表:
t(id PK, name);表中有三条记录:
shenjianzhangsanlisicase 1,两个并发事务A,B执行的时间序列如下(A先于B开始,B先于A结束):
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;提问1:假设事务的隔离级别是可重复读RR,事务A中的三次查询,A2, A3, A4分别读到什么结果集?
提问2:假设事务的隔离级别是读提交RC,A2, A3, A4又分别读到什么结果集呢?
case 2,仍然是上面的两个事务,只是A和B开始时间稍有不同(B先于A开始,B先于A结束):
B1: start transaction;
A1: start transaction;
A2: select * from t;
B2: insert into t values (4, wangwu);
A3: select * from t;
B3: commit;
A4: select * from t;提问3:假设事务的隔离级别是可重复读RR,事务A中的三次查询,A2, A3, A4分别读到什么结果集?
提问4:假设事务的隔离级别是读提交RC,高防服务器A2, A3, A4的结果集又是什么呢?
case 3,仍然是并发的事务A与B(A先于B开始,B先于A结束):
A1: start transaction;
B1: start transaction;
B2: insert into t values (4, wangwu);
B3: commit;
A2: select * from t;提问5:假设事务的隔离级别是可重复读RR,事务A中的A2查询,结果集是什么?
提问6:假设事务的隔离级别是读提交RC,A2的结果集又是什么呢?
case 4,事务开始的时间再换一下(B先于A开始,B先于A结束):
case 4,事务开始的时间再换一下(B先于A开始,B先于A结束):
B1: start transaction;
A1: start transaction;
B2: insert into t values (4, wangwu);
B3: commit;
A2: select * from t;提问7:假设事务的隔离级别是可重复读RR,事务A中的A2查询,结果集是什么?
提问8:假设事务的隔离级别是读提交RC,A2的亿华云结果集又是什么呢?
很多时候,我们以为自己懂了,其实...
很赞哦!(7965)
相关文章
- 3.dns修改成功后,点击“域名解析”,按提示进行操作。解析格式一般如下:
- Google 开源的 Python 命令行库:初探 fire
- 懒人秘籍:教你如何避免编写pandas代码
- 日常工作中很容易犯的几个并发错误
- 当投资者经过第二阶段的认真学习之后又充满了信心,认为自己可以在市场上叱咤风云地大干一场了。但没想到“看花容易绣花难”,由于对理论知识不会灵活运用.从而失去灵活应变的本能,就经常会出现小赢大亏的局面,结果往往仍以失败告终。这使投资者很是困惑和痛苦,不知该如何办,甚至开始怀疑这个市场是不是不适合自己。在这种情况下,有的人选择了放弃,但有的意志坚定者则决定做最后的尝试。
- 不懂什么是锁?看看这篇你就明白了
- 如果你打算在2020年学习Java,千万别错过这些书
- 冒着挂科的风险也要给你们看的 Spring Cloud 入门总结
- 国内域名
- JavaScript如何实现字符串拼接操作