当前位置: 首页 > news >正文

不可重复读和幻读详解(必看!!!)

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

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

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

下面是用来演示的一个数据表:
在这里插入图片描述

两个mysql服务(用左和右区分),隔离级别都为可重复度
在这里插入图片描述

1、

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

失败图如下:
在这里插入图片描述

2、

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

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

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

3、重点!!!

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

不成功示例:我们会发现删除元素后立马就读到了这个数据。
在这里插入图片描述

总结:

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

相关文章:

  • 2022eclipse下载安装与使用教程
  • 【云原生】zookeeper + kafka on k8s 环境部署
  • 【牛客刷题日记】— Javascript 通关秘籍
  • 深度学习项目部署遇到的错误【记录】
  • 解决无法获取到B站点赞数和播放量的解决办法
  • 【历史上的今天】9 月 19 日:世界上第一个表情符号;微软发布 Virtual PC;苹果 UI 扁平化的开始
  • lio-sam框架:后端里程计、回环、gps融合
  • 使用Eclipse创建一个简单的servlet项目
  • 【OpenCV】- 模板匹配(浩瀚星空只为寻找那一抹明月)
  • Python Apex Legends 武器自动识别与压枪 全过程记录
  • 程序里对象很深很大,可以用这个设计模式缓解一下
  • Seata 分布式事务 详解+使用
  • 前端马农:抢不到消费券,我还不会自己做一张吗
  • React基础-JSX事件绑定-事件传参
  • python爬虫面试题集锦及答案
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • CSS 专业技巧
  • Git同步原始仓库到Fork仓库中
  • Java,console输出实时的转向GUI textbox
  • javascript从右向左截取指定位数字符的3种方法
  • Java新版本的开发已正式进入轨道,版本号18.3
  • PermissionScope Swift4 兼容问题
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • Vue小说阅读器(仿追书神器)
  • 对JS继承的一点思考
  • 对象引论
  • 工作踩坑系列——https访问遇到“已阻止载入混合活动内容”
  • 关于List、List?、ListObject的区别
  • 新版博客前端前瞻
  • 硬币翻转问题,区间操作
  • Android开发者必备:推荐一款助力开发的开源APP
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​埃文科技受邀出席2024 “数据要素×”生态大会​
  • #define
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (C++)八皇后问题
  • (Python) SOAP Web Service (HTTP POST)
  • (SERIES10)DM逻辑备份还原
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (四)图像的%2线性拉伸
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)菜鸟学数据库(三)——存储过程
  • (转)负载均衡,回话保持,cookie
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • ******之网络***——物理***
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .Net的DataSet直接与SQL2005交互
  • .net反编译的九款神器
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)