Repeatable Read
在Repeatable Read隔离级别下,一个事务可能会遇到幻读(Phantom Read)的问题。
幻读是指,在一个事务中,第一次查询某条记录,发现没有,但是,当试图更新这条不存在的记录时,竟然能成功,并且,再次读取同一条记录,它就神奇地出现了。
我们仍然先准备好students
表的数据:
mysql> select * from students;
+----+-------+
| id | name |
+----+-------+
| 1 | Alice |
+----+-------+
1 row in set (0.00 sec)
然后,分别开启两个MySQL客户端连接,按顺序依次执行事务A和事务B:
时刻 | 事务A | 事务B |
---|---|---|
1 | SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; | SET TRANSACTION ISOLATION LEVEL REPEATABLE READ; |
2 | BEGIN; | BEGIN; |
3 | SELECT * FROM students WHERE id = 99; -- empty | |
4 | INSERT INTO students (id, name) VALUES (99, 'Bob'); | |
5 | COMMIT; | |
6 | SELECT * FROM students WHERE id = 99; -- empty | |
7 | UPDATE students SET name = 'Alice' WHERE id = 99; -- 1 row affected | |
8 | SELECT * FROM students WHERE id = 99; -- Alice | |
9 | COMMIT; |
事务B在第3步第一次读取id=99
的记录时,读到的记录为空,说明不存在id=99
的记录。随后,事务A在第4步插入了一条id=99
的记录并提交。事务B在第6步再次读取id=99
的记录时,读到的记录仍然为空,但是,事务B在第7步试图更新这条不存在的记录时,竟然成功了,并且,事务B在第8步再次读取id=99
的记录时,记录出现了。
可见,幻读就是没有读到的记录,以为不存在,但其实是可以更新成功的,并且,更新成功后,再次读取,就出现了。
Repeatable Read相关推荐
- 数据库隔离级别---MySQL的默认隔离级别就是Repeatable,Oracle默认Read committed,最高级别Serializable
目录 Read uncommitted 读未提交 Read committed 读提交 Repeatable read 重复读 Serializable 序列化 什么是脏读 重复读与幻读 隔离级别与锁 ...
- MySQL事务的四种隔离级别,mysql中的不可重复读和幻读的区别,Repeatable read可重复读隔离级别下怎么不存在幻读问题?
1. 事务的隔离级别 1.1 read uncommited:读未提交.一个事务读到了另一个事务未提交的脏数据,称之为脏读. 1.2 read commited:读已提交.解决了脏读问题,但当前事务两 ...
- 【.net函数式编程】可重复的执行repeatable execution
英文原文: https://blog.ploeh.dk/2020/03/23/repeatable-execution/ 记录(Log)什么日志,以及如何记录(Log)日志. 当我访问软件组织以帮助 ...
- 【眼见为实】自己动手实践理解数据库REPEATABLE READ Next-Key Lock
[REPEATABLE READ] 首先设置数据库隔离级别为可重复读(REPEATABLE READ): set global transaction isolation level REPEATAB ...
- Innodb事务隔离级别-repeatable read详解
ANSI/ISO SQL标准定义了4中事务隔离级别:未提交读(read uncommitted),提交读(read committed),重复读(repeatable read),串行读(serial ...
- 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.可见性比 ...
- java中@Repeatable的理解
@Repeatable是jdk8中新增的注解,使用如Spring中的@ComponentScan注解.在没有@Repeatable注解的的注解中,在同一个地方使用相同的注解会报错,有了此元注解注解的注 ...
- Java注解定义使用@Retention、@Documented、@Target、@Inherited、@Repeatable
元标签有 @Retention.@Documented.@Target.@Inherited.@Repeatable 5 种. @Retention Retention 的英文意为保留期的意思.当 @ ...
- 可重复读(Repeatable read)能防住幻读吗?
文章目录 可重复读(Repeatable read)能防住幻读吗? 事务隔离级别 事务的并发问题 概念 幻读和不可重复读的区别 乐观锁与悲观锁 悲观锁 乐观锁 数据版本 MVCC 当前读 Next-K ...
- java注解(Annotation)-Repeatable实战
Java 预定义注解 Java 支持一组预先定义好的注解.下面介绍了Java Core 中提供的注解 @Retention: 该注解用来修饰其他注解,并标明被修饰注解的作用域.其 value 的属性值 ...
最新文章
- oracle与db2的应用场景区别,db2和oracle语句区别
- python推荐书籍-7本经典的Python书籍,你都读过了么?
- 如何利用OpenSSL生成证书
- ae 创建图像等高线 蒙版_Pixelmator ——图像处理软件
- Develop chrome extension study
- 【NOI2002】贪吃的九头龙
- HDU 4879 ZCC loves march (并查集,set,map)
- ultrascale和arm区别_[原创] Avnet Zynq UltraScale+MPSoC系列Ultra96开发方案
- matlab命令及海洋作图
- RSS源推荐大全(it版)
- 德国互联网现状,缺人,4万元每月的收入,可以考虑移民了
- 数据挖掘导论实验报告01
- Predictive and Prescriptive Methods in Operations Research and Machine Learning: An Optimization App
- java web实验报告_JavaWeb实验报告
- hx-2.4g-rx-2_Rx-如果话务员可以讲话!
- 家装项目过程工人监督定位考勤系统新利器
- 最实用的IT类网站及工具大集合[转]
- 怎样去掉超级链接的下划线和颜色.
- (PTA)6-9 字符串压缩
- 用Python写的猜灯谜软件源代码