在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相关推荐

  1. 数据库隔离级别---MySQL的默认隔离级别就是Repeatable,Oracle默认Read committed,最高级别Serializable

    目录 Read uncommitted 读未提交 Read committed 读提交 Repeatable read 重复读 Serializable 序列化 什么是脏读 重复读与幻读 隔离级别与锁 ...

  2. MySQL事务的四种隔离级别,mysql中的不可重复读和幻读的区别,Repeatable read可重复读隔离级别下怎么不存在幻读问题?

    1. 事务的隔离级别 1.1 read uncommited:读未提交.一个事务读到了另一个事务未提交的脏数据,称之为脏读. 1.2 read commited:读已提交.解决了脏读问题,但当前事务两 ...

  3. 【.net函数式编程】可重复的执行repeatable execution

    英文原文: https://blog.ploeh.dk/2020/03/23/repeatable-execution/ 记录(Log)什么日志,以及如何记录(Log)日志.  当我访问软件组织以帮助 ...

  4. 【眼见为实】自己动手实践理解数据库REPEATABLE READ Next-Key Lock

    [REPEATABLE READ] 首先设置数据库隔离级别为可重复读(REPEATABLE READ): set global transaction isolation level REPEATAB ...

  5. Innodb事务隔离级别-repeatable read详解

    ANSI/ISO SQL标准定义了4中事务隔离级别:未提交读(read uncommitted),提交读(read committed),重复读(repeatable read),串行读(serial ...

  6. 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.可见性比 ...

  7. java中@Repeatable的理解

    @Repeatable是jdk8中新增的注解,使用如Spring中的@ComponentScan注解.在没有@Repeatable注解的的注解中,在同一个地方使用相同的注解会报错,有了此元注解注解的注 ...

  8. Java注解定义使用@Retention、@Documented、@Target、@Inherited、@Repeatable

    元标签有 @Retention.@Documented.@Target.@Inherited.@Repeatable 5 种. @Retention Retention 的英文意为保留期的意思.当 @ ...

  9. 可重复读(Repeatable read)能防住幻读吗?

    文章目录 可重复读(Repeatable read)能防住幻读吗? 事务隔离级别 事务的并发问题 概念 幻读和不可重复读的区别 乐观锁与悲观锁 悲观锁 乐观锁 数据版本 MVCC 当前读 Next-K ...

  10. java注解(Annotation)-Repeatable实战

    Java 预定义注解 Java 支持一组预先定义好的注解.下面介绍了Java Core 中提供的注解 @Retention: 该注解用来修饰其他注解,并标明被修饰注解的作用域.其 value 的属性值 ...

最新文章

  1. oracle与db2的应用场景区别,db2和oracle语句区别
  2. python推荐书籍-7本经典的Python书籍,你都读过了么?
  3. 如何利用OpenSSL生成证书
  4. ae 创建图像等高线 蒙版_Pixelmator ——图像处理软件
  5. Develop chrome extension study
  6. 【NOI2002】贪吃的九头龙
  7. HDU 4879 ZCC loves march (并查集,set,map)
  8. ultrascale和arm区别_[原创] Avnet Zynq UltraScale+MPSoC系列Ultra96开发方案
  9. matlab命令及海洋作图
  10. RSS源推荐大全(it版)
  11. 德国互联网现状,缺人,4万元每月的收入,可以考虑移民了
  12. 数据挖掘导论实验报告01
  13. Predictive and Prescriptive Methods in Operations Research and Machine Learning: An Optimization App
  14. java web实验报告_JavaWeb实验报告
  15. hx-2.4g-rx-2_Rx-如果话务员可以讲话!
  16. 家装项目过程工人监督定位考勤系统新利器
  17. 最实用的IT类网站及工具大集合[转]
  18. 怎样去掉超级链接的下划线和颜色.
  19. (PTA)6-9 字符串压缩
  20. 用Python写的猜灯谜软件源代码

热门文章

  1. fman文件管理软件:使用教程进阶_安装插件
  2. office2010 启动man_OFFICE2010启动慢解决方案
  3. 中小电商如何与全球400余家快递物流公司做接口对接
  4. Matlab 离散小波变换函数 dwt2() 原理介绍与实验
  5. 可以批量查询韵达快递单号的软件推荐
  6. oracle-merge into using on用法
  7. springboot-jpa扫描包
  8. 自定义Dialog(QQ头像选择弹出的对话框)
  9. 设备一路485如何供两台电脑使用_电脑没装打印机怎样共享打印
  10. 贪心算法求解一个序列中出现次数最多的元素问题