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

mysql可重复读不能解决幻读吗?

1、可重复读和幻读的概念

1.1、可重复读

       可重复读是数据库的四个隔离级别之一,可重复读可以保证在一个事物之内读取到的数据永远是相同的(通过mvcc表快照实现的),哪怕这期间有其它事务对数据做了修改,也不会影响当前事务的查询。

1.2、幻读

      网上有不少博客说:幻读是一个事物内多次查询得到的数据结果不一样。比如说select (1)这种查询,如果有其它事务增加或删除了数据,会影响到当前事务的select (1)。这种说法是错误的,因为可重复读隔离级别下,这种情况就不会出现,后面会有实际操作。
      我认为的幻读是一个事务内,比如执行查询select * from test where id = 3 没有查出来数据,然后接着执行insert操作INSERT INTO test (id) values (3),可能会因为其它事务先一步插入了id为3的数据,导致当前事务插入数据失败。这种情况是可能会出现的,可重复读解决不了这种问题。

2、实操

      以此表为例,表里只有主键id字段,只有两条数据。
在这里插入图片描述
      开启事务,查询id为3的数据
在这里插入图片描述
      会查询不到,再开启一个事务,插入id为3的数据。
在这里插入图片描述
      操作成功,表里已经有了id为3的数据了
在这里插入图片描述
      但是之前的第一个事务由于是在插入id为3的事务之前开启的,所以第一个事务是查询不到id为3的数据的。
在这里插入图片描述
在这里插入图片描述
      下面复刻幻读,给第一个事务也执行插入id为3的数据。
在这里插入图片描述
      可以看到,报错了。因为id为3的数据已经被其他事务插入了。这就是我理解的可重复读无法解决的幻读。
      这也是我面试喜欢问的一个问题,在一个事务内对同一个查询执行两次,查询出来的结果肯定会一样吗?我想现在大家心里应该有答案了吧。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 安宝特科技 | AR眼镜在安保与安防领域的创新应用及前景
  • 实时地图+瞬移,黑神话地图工具来了
  • LLM模型:代码讲解Transformer运行原理
  • 快速排序的深入优化探讨
  • RedisCache存入redis的数据key为何name和id的分隔符是两个冒号::
  • 2024年高教社杯全国大学生数学建模竞赛A题思路(2024数学建模国赛A题思路)
  • 【Effective Java】多构造器参数使用构建器 (快速上手)
  • 【HuggingFace Transformers】OpenAIGPTModel源码解析
  • MySQL学习--加强
  • MATLAB算法实战应用案例精讲-【人工智能】数据集市(概念篇)
  • 电子发射与气体导电
  • 【免费分享】25秋招提前批25秋招信息表
  • 《Cloud Native Data Center Networking》(云原生数据中心网络设计)读书笔记 -- 09部署OSPF
  • Gitflow基础知识
  • 【Python知识宝库】文件操作:读写文件的最佳实践
  • Angular4 模板式表单用法以及验证
  • Babel配置的不完全指南
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • java8-模拟hadoop
  • java概述
  • MySQL的数据类型
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • Redis 懒删除(lazy free)简史
  • SpringBoot几种定时任务的实现方式
  • TiDB 源码阅读系列文章(十)Chunk 和执行框架简介
  • 如何实现 font-size 的响应式
  • 系统认识JavaScript正则表达式
  • 源码安装memcached和php memcache扩展
  • 正则表达式小结
  • 转载:[译] 内容加速黑科技趣谈
  • ​queue --- 一个同步的队列类​
  • #13 yum、编译安装与sed命令的使用
  • #pragma data_seg 共享数据区(转)
  • #QT 笔记一
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (C++20) consteval立即函数
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (含笔试题)深度解析数据在内存中的存储
  • (九)信息融合方式简介
  • (南京观海微电子)——I3C协议介绍
  • (十一)图像的罗伯特梯度锐化
  • (算法)前K大的和
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)Neo4j下载安装以及初次使用
  • (转)视频码率,帧率和分辨率的联系与区别
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .NET 通过系统影子账户实现权限维持
  • .NET程序员迈向卓越的必由之路
  • @EnableConfigurationProperties注解使用
  • [ 第一章] JavaScript 简史
  • [Angularjs]ng-select和ng-options
  • [C/C++]关于C++11中的std::move和std::forward
  • [CareerCup] 17.8 Contiguous Sequence with Largest Sum 连续子序列之和最大