事务隔离级别在RR和RC下有何差异

您所在的位置:网站首页 数据库rc级别会有什么问题 事务隔离级别在RR和RC下有何差异

事务隔离级别在RR和RC下有何差异

2024-07-12 09:52:45| 来源: 网络整理| 查看: 265

为了保证文章知识体系的完整性,先简单解释下快照读,读提交,可重复读。

快照读(Snapshot Read) MySQL数据库,InnoDB存储引擎,为了提高并发,使用MVCC机制,在并发事务时,通过读取数据行的历史数据版本,不加锁,来提高并发的一种不加锁一致性读(Consistent Nonlocking Read)。

 

读提交(Read Committed) 数据库领域,事务隔离级别的一种,简称RC 它解决“读脏”问题,保证读取到的数据行都是已提交事务写入的 它可能存在“读幻影行”问题,同一个事务里,连续相同的read可能读到不同的结果集

 

可重复读(Repeated Read) 数据库领域,事务隔离级别的一种,简称RR 它不但解决“读脏”问题,还解决了“读幻影行”问题,同一个事务里,连续相同的read读到相同的结果集

 

在读提交(RC),可重复读(RR)两个不同的事务的隔离级别下,快照读有什么不同呢?

先说结论:

事务总能够读取到,自己写入(update /insert /delete)的行记录RC下,快照读总是能读到最新的行数据快照,当然,必须是已提交事务写入的RR下,某个事务首次read记录的时间为T,未来不会读取到T时间之后已提交事务写入的记录,以保证连续相同的read读到相同的结果集

画外音:可以看到

(1) 和并发事务的开始时间没关系,和事务首次read的时间有关; (2) 由于不加锁,和互斥关系也不大;

例子,InnoDB表: t(id PK, name); 表中有三条记录: 1, wangyi 2, zhangsan 3, lisi

case 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又分别读到什么结果集呢?

回答:

RR下 (1)A2读到的结果集肯定是{1, 2, 3},这是事务A的第一个read,假设为时间T; (2)A3读到的结果集也是{1, 2, 3},因为B还没有提交; (3)A4读到的结果集还是{1, 2, 3},因为事务B是在时间T之后提交的,A4得读到和A2一样的记录;

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

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 1一样。

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的结果集又是什么呢?

回答:

在RR下,A2是事务A的第一个read,假设为时间T,它能读取到T之前提交事务写入的数据行,故结果集为{1, 2, 3, 4}。

在RC下,没有疑问,一定是{1, 2, 3, 4}。

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的结果集又是什么呢? 回答:事务的开始时间不一样,不会影响“快照读”的结果,所以结果集和case 3一样。

总结:

RR下,事务在第一个Read操作时,会建立Read View RC下,事务在每次Read操作时,都会建立Read View

 

 



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭