前言:看了很多关于MySQL隔离级别的视频和文章,发现了一个问题,大家都是说,不可重复读是在一个事务中读到了另一个事务提交后修改后的数据,而幻读是一个事务读到了另一个事务中添加并提交后的数据。那么删除数据是属于不可重复读还是幻读?

那么重点来了,很少有人说,另一个事务将数据删除提交后,在原事务中能否读到删除后的数据,而这个是属于不可重复读问题,还是属于幻读问题。(看之前请先了解事务相关的知识)

针对这个问题,我发现很多人都没有去深入思考,也没有去实践,就直接复制别人的文章然后发博客了,这是非常不负责任的做法,特别是一些粉丝较多的博主,容易误导别人。
网上大部分的文章,都是演示插入数据后,另一个事务不能再插入数据,而很少有人会将删除数据的演示展示出来,这也是我很不理解的一个地方。
注:这是我自己在学习过程中的理解,以及根据实际演示来得出的结论,不能保证完全正确(环境mysql5.6)

下面是用来演示的一个数据表:

两个mysql服务(用左和右区分),隔离级别都为可重复度

1、

首先演示可重复读解决不可重复读问题,左右两别分别开启事务,然后右边修改 id 为2的 balance 为 300;并提交事务,可以看到是左边中是读不到右边中修改的值的,解决了修改的不可重复读问题;但是不知道为什么,有时候会出现不可重复读问题,不知道是不是因为我mysql版本的问题,这个以后再研究,失败的图为第二张。
成功图:左边在事务结束之前没有读到右边修改提交的值

失败图如下:

2、

演示新增的幻读问题,可重复度会出现这个情况,在右边添加一条记录(3,“cc”,400)

正常情况:虽然在左边没有读到右边新增提交的记录,但是当我们去插入id相同的数据时,显示主键重复,意思就是实际上这条记录已经存在了,这就发生了幻读。

不正常情况:我也不知道为什么演示的时候总是出现不同的情况,第二种情况是直接读到了不同的数据,暂且也把它当一种幻读情况吧

3、重点!!!

演示删除时会出现的情况,删除id 为3 的记录。
正常情况:我们发现右边的删除提交后的并没有影响左边的数据,特意在左边用了一条更新语句证明该记录在左边事务中还存在,和插入数据是不一样的

不成功示例:我们会发现删除元素后立马就读到了这个数据。

总结:

我们可以看到,在右边事务删除数据并提交时,左边事务并没有受到影响,所以可以认为可重复度解决了该问题,所以 删除和修改 应该都是属于不可重复读,而只有 新增 才是属于幻读。
(也可以加入锁的理解,锁住的是操作的那条记录,我们可以对他进行修改和删除,而不能保证其他数据的插入)
以上这是我个人目前的一个理解,可能随着知识的不断增长会有新的理解,以及不知道为什么我的mysql总是在操作时出现不同的结果,欢迎大家留言讨论。

不可重复读和幻读详解(必看!!!)相关推荐

  1. MySQL锁与脏读、不可重复读、幻读详解

    一.MySQL锁 1.锁简介 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的 计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据 ...

  2. 用sql演示脏读,不可重复读,幻读,不怕你看不懂

    介绍 要聊事务,不可避免的要提到数据库事务的四大特性 原子性(Atomic) 一致性(Consistency) 隔离性(Isolation) 持久性(Durability) 今天只聊隔离性,其他的比较 ...

  3. mysql可重复读和幻读的理解

    mysql可重复读和幻读的理解 可重复读和幻读的定义 最后总结 参考资料 很多教程和书籍对mysql的可重复读和幻读的解释都比较含糊,本文结合原理和其他的考证,深入分析下. 这里讨论的引擎是常用的In ...

  4. mysql 脏读 不可重复读 幻读_mysql事务隔离级别/脏读/不可重复读/幻读详解

    一.四种事务隔离级别 1.1read uncommitted 读未提交 即:事务A可以读取到事务B已修改但未提交的数据. 除非是文章阅读量,每次+1这种无关痛痒的场景,一般业务系统没有人会使用该事务隔 ...

  5. 一文详解脏读、不可重复读、幻读

    MySQL 是支持多事务并发执行的.否则来一个事务处理一个请求,处理一个人请求的时候,其它事务都等着,那估计都没人敢用MySQL作为数据库,因为用户体验太差,估计都要砸键盘了. 既然事务可以并发操作, ...

  6. Mysql有四种事务隔离级别,详解脏读、不可重复读、幻读

    Mysql的事务隔离级别 Mysql有四种事务隔离级别,这四种隔离级别代表当存在多个事务并发冲突时,可能出现的脏读.不可重复读.幻读的问题. 脏读 大家看一下,我们有两个事务,一个是 Transact ...

  7. Mysql-详解脏读、不可重复读、幻读

    Mysql的事务隔离级别 Mysql有四种事务隔离级别,这四种隔离级别代表当存在多个事务并发冲突时,可能出现的脏读.不可重复读.幻读的问题. 脏读 大家看一下,我们有两个事务,一个是 Transact ...

  8. SQL Server 中的事务与事务隔离级别以及如何理解脏读, 未提交读,不可重复读和幻读产生的过程和原因...

    原本打算写有关 SSIS Package 中的事务控制过程的,但是发现很多基本的概念还是需要有 SQL Server 事务和事务的隔离级别做基础铺垫.所以花了点时间,把 SQL Server 数据库中 ...

  9. 什么是脏读,不可重复读,幻读

    1. 脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据. 2. 不可重复读 :是指在一个事务内,多次 ...

最新文章

  1. faster rcnn源码解读(三)train_faster_rcnn_alt_opt.py
  2. android 字符串下标,android – 在TextView中为特定字符设置下标和上标?
  3. WPF内存泄露:CollectionViewSource.GetDefaultView导致Cache对象
  4. android 图片缓存工具类,Android工具类系列-Glide图片缓存与圆角
  5. ARM学习笔记7——乘法指令
  6. linux批量替换文件名中的相同字符
  7. 事务不在活跃oracle,MYSQL性能优化笔记_2
  8. MessageQueue的使用方法(二)
  9. html+css+js实现登录页面
  10. 【Luogu3932】浮游大陆的68号岛(前缀和)
  11. JavaScript 游戏开发包-收集
  12. iOS网络请求下来的数据显示时出现的问题
  13. 非标准语法;请使用 _使用无线AP如何供电?
  14. lopatkin俄大神精简中文系统Windows 10 Enterprise 18362.145 19H1 Release x86-x64 ZH-CN BOX
  15. 暴风影音2013校园招聘笔试题目——c语言D卷
  16. 头脑风暴 软件_头脑风暴和思维导图的最佳网站和软件
  17. 没有远程桌面客户端访问许可证
  18. 全网最佳,第三方登录系列——苹果登录
  19. float取小数点后四位
  20. python中字母大小顺序_Python中的字母顺序

热门文章

  1. vscode 代码格式化
  2. B/S实现大视频上传
  3. navicat自动备份和还原mysql数据库
  4. 第三章 基于dolphinscheduler的明细模型设计之一致性维表(DIM)建设
  5. 贸易公司销售业务中发票相关问题
  6. 20 行代码极速为 App 加上聊天功能
  7. 电大计算机应用技术基础形考二,贵州电大2020年春季《计算机应用技术基础》计算机应用技术基础02任务满分...
  8. JAVA之坦克大战(四)敌方坦克的移动和发射子弹
  9. [评论]究竟什么才是自主研发和自主知识产权?
  10. JMeter从HTTP接口返回的参数中获取数据 - 使用Json提取器