以下内容全部基于innodb。

虽然下面有很多概念很浅显,但还是要解释一下

什么是幻读?

当一个事务在多次查询中,发现了一行不是在当前事务中添加的数据。出现这种问题就叫做幻读。

关于四种隔离级别

未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据

提交读(Read Committed):只能读取到已经提交的数据。解决了脏读,未解决不可重复读问题。

可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的。该隔离级别消除了不可重复读,但是还存在幻象读。

串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

其实,传统的rr隔离级别下,是存在幻读问题的,但mysql 下真的会有幻读问题吗?先说明一下我的结论:

mysql在rr隔离级别下一定程度上解决了幻读问题。 由于innodb引擎下存在当前读和快照读的概念。

在当前读的情况下,mysql通过配置可以采用记录锁(Record Lock)+间隙锁(Gap Lock),让其他插入或删除事务死锁,达到解决幻读问题。

在快照读的情况下,mysql如果不更新插入记录,那么由于是读取的旧版本记录,对于其他事务插入数据不可见,从而达到了解决幻读问题。但是如果当前事务更新记录(包括不可见的),会去读取最新版本内容,从而看到了其他事务插入的数据,产生幻读。

个人理解,当前读跟快照读的区分,就是因为mysql innodb mvcc,普通的查询就是快照读。

此处建议去看一下mvcc原理,涉及比较多,不再此处解释。

什么是当前读

以下操作就是采用当前读,会读取当前数据的最新记录,同时加锁

select ... lock in share mode

select ... for update

insert

update

delete

什么是快照读

最普通的查询操作,查询的时候不包括lock in share mode跟 for update

select * from test

就先介绍这么多,作为自己备忘,看到的小伙伴可以去自己证实以下我的结论。实践出真知

mysql rr解决幻读吗_mysql rr隔离级别解决幻读了吗相关推荐

  1. MySQL不可读举例_MySQL事务隔离级别与相关示例(脏读、不可重复读、幻读)

    目录 MySQL8中隔离级别的变量跟之前的版本不一样,之前是tx_isolation,MySQL8改成了transaction_isolation.查看当前隔离级别的命令是 mysql> sel ...

  2. 数据库的脏读、不可重复读、幻读以及四种隔离级别

    一.数据库的脏读.不可重复读和幻读 1.脏读: (读取了未提交的新事物,然后被回滚了) 事务A读取了事务B中尚未提交的数据.如果事务B回滚,则A读取使用了错误的数据. 比如我给你转了100万,但是我还 ...

  3. mysql 可重复读 更新覆盖_Mysql事务隔离级别之可重复读

    Mysql事务隔离级别之.可重复读(REPEATABLE-READ) 查看mysql 事务隔离级别 mysql> SELECT @@tx_isolation; +---------------- ...

  4. MySQL数据库中,在读已提交和可重复读这两个不同事务隔离级别下幻读的区别

    目 录 1. 前 言 1.1 并发事务存在的问题 1.2 事务的隔离级别 1.3 快照读和当前读 2. 不同事务隔离级别下幻读的区别 2.1 读已提交下的幻读 2.2 可重复读下的幻读 2.2.1 情 ...

  5. MySQL事务原理分析(ACID特性、隔离级别、锁、MVCC、并发读异常、并发死锁以及如何避免死锁)

    MySQL事务原理分析(ACID特性.隔离级别.锁.MVCC.并发读异常.并发死锁以及如何避免死锁) 一.事务 目的 组成 特征 事务空间语句 二.ACID特性 原子性(A) 隔离性(I) 持久性(d ...

  6. MySQL RR隔离级别解决幻读问题?

    首先,讲mysql的隔离级别之前需要复习一下事务的四个特性 (注:mysql存储引擎InnoDB)(待完善) 事务的四个特性(ACID): 原子性(Atomicity) 一致性(Consistency ...

  7. mysql 幻读的隔离_MySQL的RR隔离级别与幻读问题

    最近在网上看了不少mysql锁的文章,不少文章都提到InnoDB的RR隔离级别(Repeatable Read)无法解决幻读的问题.对此问题作者亲自做了一些实验,将实验结论记录在此. 本次实验的mys ...

  8. MySQL幻读到底是什么?怎么解决?

    前言 稍微懂点开发经验的同学应该都知道,MySQL一共有四个隔离级别,分别是Read uncommitted (读未提交).Read committed(读已提交).Repeatable read(可 ...

  9. 数据库事务脏读、幻读、不可重复读的解决方法

    概念 脏读:脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的. 幻读: 幻读是指当事务 ...

最新文章

  1. LaZagne检测windows本地存储的密码
  2. C# 多线程 参数传递
  3. 在Window Embedded CE(Wince)下使用OpenNETCF进行路由表的开发
  4. 2021-03-01 Matlab 多项式的根求解
  5. 机器学习(三)逻辑回归以及python简单实现
  6. Oracle中的UPDATE FROM解决方法
  7. Channel 与ChannelPipeline
  8. Javascript实现合并单元格
  9. java多线程中出现的异常分别有哪些_java多线程试题
  10. SQL Server 连接字符串
  11. linux期中测试答案 版本号,Linux认证测试题含答案
  12. Linux 内核 下载 编译 安装 2021 ubuntu
  13. 局域网打印机共享设置
  14. xsmax无法进入dfu模式_iPhoneXS/XSMax如何强制重启?如何进入恢复模式或DFU模式?...
  15. php 控制usb打印,usb口打印机的指令打印和驱动打印
  16. python实现星号打印出金字塔
  17. Java类和对象之对象引用之模拟手机功能
  18. meld的使用 Ubuntu入门之六
  19. 麻省理工学院计算机科学,麻省理工学院素以世界顶尖的工程学和计算机科学而享誉世界[1-2] ,位列2015-16年世...
  20. 数学(零)零散知识点

热门文章

  1. qt android 滑动效果,【转】Qt仿Android带特效的数字时钟源码分析(滑动,翻页,旋转效果)...
  2. c语言求近似值程序,c语言求pi的近似值_C语言求PI的近似值 求高人指点
  3. 成绩分析系统c语言实验报告,学生成绩管理系统实验报告
  4. FLYMCU串口下载配置界面
  5. docker安装最新版本elasticsearch
  6. i春秋 WEB Login
  7. Minio分布式对象存储的部署与使用
  8. 测试计划应包括的内容
  9. 拉式变换,卷积与传递函数
  10. 粉丝投稿 | 成功也是有“套路”的