面试之可重复读是否可以解决幻读

这篇具有很好参考价值的文章主要介绍了面试之可重复读是否可以解决幻读。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

可重复读(repeatable read)定义:一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据时是一致的。

不过理论上 是会出现幻读的,简单的来说幻读指的是当用户读取某一范围的数据行时,另外一个事务又在该范围插入了新行,当用户再次读取该范围的数据时会发现 出现新的幻影行。

注意可重复读隔离级别下,普通的查询是快照读,是不会看到别的事物插入的数据的。因此,当前在”当前读“下才会出现 幻读。

在mvcc并发控制中,读操作可以分为两类:快照读 和当前读。

快照读:

快照读 :是 在读取的数据 时 不是读取最新版本的数据。而是基于历史版本读取的一个快照信息(mysql 读取 undo log 历史版本),快照读可以使用普通的select 读取时不用在对表数据 及逆行加锁,从而解决了因为数据库表的加锁而导致的两个问题

1:解决了因加锁导致的修改数据时无法对胡数据读取问题

2:解决了因加锁导致读取数据时无法对进行修改的问题。

当前读:读取的数据最新的数据,当前读和快照读不同,因为读取最新的数据而且保证事务的隔离性,所以当前读 是需要对数据进行加锁的。

下面举个列子:

表结构

id key value
0 0 0
1 1 1

假设 select * from where value=1 for update,只在这一行加锁(注意这只是假设),其它行不加锁,那么就会出现如下场景:

面试之可重复读是否可以解决幻读,面试,职场和发展

Session A的三次查询Q1-Q3都是select * from where value=1 for update,查询的value=1的所有row。

  • T1:Q1只返回一行(1,1,1);

  • T2:session B更新id=0的value为1,此时表t中value=1的数据有两行

  • T3:Q2返回两行(0,0,1),(1,1,1)

  • T4:session C插入一行(6,6,1),此时表t中value=1的数据有三行

  • T5:Q3返回三行(0,0,1),(1,1,1),(6,6,1)

  • T6:session A事物commit。

其中Q3读到value=1这一样的现象,就称之为幻读,幻读指的是一个事务在前后两次查询同一个范围的时候,后一次查询看到了前一次查询没有看到的行

产生幻读的原因是:行锁只能锁住行,但是新插入记录的这个动作,要更新的是记录之间的'间隙'。因此,Innodb 引擎 为了解决[  可重读]隔离级别下 [当前读]而造成的幻读问题,就引出了 next_key锁,就是记录锁和 间隙锁的组合。

1:RecordLock锁:锁定单个行记录的锁。

2:CapLock锁:间隙锁,锁定索引记录间隙,确保索引记录的间隙不变(范围锁,RR隔离级别支持)

3:Next-key Lock 锁: 记录时锁和间隙锁组合。锁住数据的同时,并且锁住 数据前后范围。(记录锁+范围锁,RR隔离级别支持)文章来源地址https://www.toymoban.com/news/detail-591874.html

到了这里,关于面试之可重复读是否可以解决幻读的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    在正式开始之前,先简单回顾一下并发事务存在的问题以及事务的隔离级别等内容。 1.1 并发事务存在的问题 当两个或者两个以上事务同时开启去处理同一个表的数据时,可能会存在以下的问题: 丢失修改 脏读 不可重复读 幻读 丢失修改 丢失修改是指当两个或多个事务更新

    2024年02月02日
    浏览(44)
  • 学习平台助力职场发展与提升

    近年来,随着互联网技术的发展, 学习平台 逐渐成为了职场发展和提升的必备工具。学习平台通过提供丰富的课程内容、灵活的学习时间和个性化的学习路径,帮助职场人士更好地提升自己的技能和知识储备,为职场发展打下坚实的基础。 学习平台的优势在于提供了丰富多

    2024年02月11日
    浏览(39)
  • C++笔记之是否知道了一个数组首元素的地址就可以获取该整个数组?-合众新能源汽车面试官问题

    事前提要:前段时间去面一个公司,面试官说知道了一个数组首元素的地址,就可以获取该整个数组,我当时就困惑,不知道大小和长度,只知道地址怎么就能获取。但也没反驳面试官,面试也没通过。

    2024年02月12日
    浏览(30)
  • 如何手机搜学法减分答案? #媒体#职场发展

    今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.证件照全能管家(APP) 一个非常好用的证件照APP 常用的证件照尺寸和底色都有、日常的证件照编辑完全够用,支持一键智能拍摄证件照,还可以对照片

    2024年02月19日
    浏览(39)
  • 【职业人生】如何有效的在职场当中避免工作失误和提高个人发展

         《左传·宣公二年》:“人谁无过,过而能改,善莫大焉。”古往今来,多少人犯过错误。强大如“智绝”的诸葛孔明,也有街亭之失。职场人更是难免会在工作中出现失误。     在职场生涯当中避免不了在工作当中带来的失误,在这过程当中,我们应当要学会怎么去

    2024年02月08日
    浏览(32)
  • [office] excel成绩表格数据排名次的教程 #职场发展#知识分享#媒体

    excel成绩表格数据排名次的教程 Excel 中经常需要使用到 排名 次的技巧,成绩表格数据具体该如何排名呢?接下来是小编为大家带来的excel成绩表格数据排名次的教程,供大家参考。 步骤1:不管在学校还是各个统计领域,排名应用随处可见,如果排序会打乱原有次序,那么好多

    2024年02月21日
    浏览(33)
  • 突破职场竞争,引领未来发展:考取《研发效能(DevOps)工程师职业技术认证》

    就业形势堪忧,什么最有保障?考个“国家级”证书傍身吧! 工信部教考中心作为中国领先的行业技能认证机构,其颁发的认证证书不仅代表了个人在信息技术领域的专业能力,更可以录入工业和信息化技术技能人才数据库,这是一个重要的信息资源平台,它可以帮助企业和

    2024年02月05日
    浏览(36)
  • [office] Excel中函数进行计算两个日期参数差值的方法 #职场发展#学习方法#媒体

    Excel中函数进行计算两个日期参数差值的方法 在excel使用中,如果想计算两个日期参数的差值,该用什么函数和如何使用呢?今天,小编就教大家在Excel中函数进行计算两个日期参数差值的方法。 Excel中函数进行计算两个日期参数差值的步骤 在excel中计算两个日期参数的差值,

    2024年02月20日
    浏览(41)
  • 你知道MySQL是如何解决幻读的吗?

    SQL标准中定义了4种隔离级别,分别是读未提交、读已提交、可重复读以及序列化。不同的隔离级别下,可以解决不同的并发问题,如下图所示。当然MySQL也基本遵循了这个标准,但是在实现上稍有不同。 本文重点探讨下MySQL是如何解决幻读问题的,首先 串行化 隔离级别铁定

    2024年02月05日
    浏览(31)
  • js判断一个数组中是否有重复的数组/ 一个数组中对象的某个属性值是否重复

    项目中往往会遇到对数组处理是否存在某个形同的值。或者对象中是否存在形同元素… 下列方法常用,但不限于。 一、普通数组数据 1.1对数组进行排序,对比上一个元素和下一个元素是否相等,若相等,则说明数组有重复值。 1.2:先将数组转换成字符串,再遍历数组,在字

    2024年02月09日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包