事务Read Committed (读已提交)和Repeatable Read(可重复读)到底什么区别?
读已提交:A事务只能读到B事务已经提交的内容:
A事务读取数据(假如有10条),B事务插入或删除一条符合条件的数据但未提交时,A事务再次读取,看不到变化(还是10条),只有B提交事务,A才能读到变化后的数据。
可重复读:A事务只要不提交,每次读到的内容一致:
A事务读取数据(假如有10条),此时B事务插入或删除一条符合条件的数据但未提交事务,A事务再次读取,结果一样,因为B并没提交事务!说明可重复读的级别也解决了脏读。
A事务读取数据(假如有10条),此时B事务插入或删除一条符合条件的数据并提交事务,然后B事务也查了查,数据已经改变了,A事务再次读取,结果还是一样!
A事务表示很疑惑,以为是B事务没提交造成的,B事务一脸懵,想着明明已经提交事务了呀,为了配合A事务,B事务又添加或删除一条符合条件的数据并提交事务,并且B事务也查了查数据并让A看了看,没错,查到的数据已经改变(数据多了或少了一条),A事务这回确认B事务已经修改并提交了,就再次读取,发现无论读取多少次结果都一样!A表示出现了幻觉!
这就叫可重复读!因为每次读的都一样,实际上硬盘数据已经改变,A每次读取的都是备份数据!
此时A事务提交后再去读取,终于读取结果是B事务修改后的数据了!
读已提交和可重复读的区别在于:个人以为可重复读是沿袭了读已提交并让事务隔离级别更高:
读已提交是A事务本身不用提交,就能读取到B事务修改并提交事务的数据,当然,A提交事务自然也是能读取B修改后的数据的;
可重复读对此基础上,要求A也必须提交事务,才能读取到B修改并提交事务的数据,若A在B修改并提交事务后没有提交事务就去读取,每次的结果都是一样的,但实际B事务已对数据做出成功修改(硬盘中的文件数据以改变),A事务读到的都是备份数据,总感觉出现了幻觉,所以叫幻读!
以上纯属个人观点,有啥错误各位大佬请指出,本人才疏学浅刚刚入门,看了很多介绍这两个区别的,发现讲的一头雾水,很多都没提到两者差别在于A事务也要提交,我是看了B站老杜的MYSQL教学才弄懂的
事务Read Committed (读已提交)和Repeatable Read(可重复读)到底什么区别?相关推荐
- MySQL是如何实现读已提交和可重复读的——MVCC原理
先来看一下MySQL的事务隔离级别: 隔离级别 脏读 不可重复读 幻读 读未提交 有 有 有 读已提交 无 有 有 可重复读 无 无 有 串行化 无 无 无 MySQL有四种隔离级别:读未提交.读已提 ...
- mysql的读已提交和可重复读(Read Committed和Repeatable Read隔离级别)
1.共享锁和排他锁 1.1.共享锁 1.2.排他锁 1.3.总述 2.MVCC 2.1.隐藏字段 2.2.Read View 2.3.Undo log 2.4.update的具体流程 2.5.可见性比 ...
- MVCC如何实现数据库读已提交和可重复读这两种隔离级别?
文章目录 隐藏列 undo log ReadView 读已提交和可重复读的实现 我们都知道Mysql有四种事务隔离级别: 读未提交 读已提交 可重复读 串行化 这四个隔离级别的特点就不多赘述了,这次主 ...
- 数据库基础知识点-事务隔离级别区分(读未提交、读已提交和可重复读)
事务隔离级别 数据库事务隔离级别分4个: 读未提交-Read uncommitted 读已提交-Read committed 可重复读-Repeatable read–MySQL 序列化-Serial ...
- 看完这篇文章,让你彻底理解事务隔离级别(读未提交、读已提交、可重复读、序列化)
对于不同的事务,采用不同的隔离级别分别有不同的现象.主要有下面3种: 1.脏读(dirty read):一个事务可以读取另一个尚未提交事务的修改数据. 2.不可重复读(nonrepeatable re ...
- MySQL数据库中,在读已提交和可重复读这两个不同事务隔离级别下幻读的区别
目 录 1. 前 言 1.1 并发事务存在的问题 1.2 事务的隔离级别 1.3 快照读和当前读 2. 不同事务隔离级别下幻读的区别 2.1 读已提交下的幻读 2.2 可重复读下的幻读 2.2.1 情 ...
- MySQL事务隔离级别:可重复读、读已提交、读未提交。实操
MySQL的事务隔离级别: 目录 一.可重复读(默认) REPEATABLE-READ: 二.读已提交 READ-COMMITTED: 一.可重复读(默认) REPEATABLE-READ: 准备实 ...
- MySQL事务的四种隔离级别,mysql中的不可重复读和幻读的区别,Repeatable read可重复读隔离级别下怎么不存在幻读问题?
1. 事务的隔离级别 1.1 read uncommited:读未提交.一个事务读到了另一个事务未提交的脏数据,称之为脏读. 1.2 read commited:读已提交.解决了脏读问题,但当前事务两 ...
- mysql读提交和重复读区别_读已提交和可重复读的区别 命令行测试
可重复读:两个事务进行数据操作他们是互不干扰的 ,事务先A进行数据查询,事务B进行一次事务修改并进行数据提交,事务A再进行一次查询,数据是不改变的. 读已提交:两个事务进行数据操作,事务先A进行数据查 ...
最新文章
- mysql中leave和_MySQL数据库之Mysql存储过程使用LEAVE实现MSSQL存储过程中return语法
- 接口测试 2021 接口测试白皮书 欢迎下载阅读
- IO流文件的相对路径及获取系统路径方法
- 全国数据中心分布图上线 轻轻松松找机房
- 在PHP中如何要json中的数据,如何在不知道键值的情况下在php中读取JSON数据
- C++设计模式-桥接模式
- 半学期学计算机有感论文,【计算机学习心得论文】_计算机学习心得论文参考资料-毕业论文范文网...
- 如何配置Ubuntu 16.04 GRUB 2引导加载程序
- 苹果鸠占鹊巢打败微软 纳德拉欲以其人之道还治其身
- 2021美赛C题M奖思路
- H264码流中SPS PPS详解
- 190426网络编程
- 重温张欣穗购书衷心与申霞艳,张鸿等名师座谈《千万与春住》二零一九年六月二十四日
- java中eof错误是啥意思_EOFException异常详解
- windows电脑使用iTunes导入视频/音乐(本人使用,仅供参考)
- 香港虚拟主机与国内虚拟主机区别
- 开关电源保险丝、整流桥及输入滤波电容的选型
- 计算机上做报纸模板,word中怎么制作报纸排版模板
- mysql maser-slave
- App/QoE-Based Congestion control