幻读与不可重复读的区分

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

幻读 VS 不可重复读

        幻读重点在于数据是否存在。原本不存在的数据却真实的存在了,这便是幻读。
        在同一个事务中,第一次读取到结果集和第二次读取到的结果集不同。引起幻读的原因在于另一个事务进行了INSERT操作。

        不可重复读重点在于数据是否被改变了。在一个事务中对同一条记录进行查询,第一次读取到的数据和第二次读取到的数据不一致,这便是可重复读。引起不可重复读的原因在于另一个事务进行了UPDATE或者是DELETE操作。

        简单来说:幻读是说数据的条数发生了变化,原本不存在的数据存在了。不可重复读是说数据的内容发生了变化,原本存在的数据的内容发生了改变。
        关键在于,我们需要从多事务并发的角度来考虑问题:

幻读与不可重复读的区分

理解

        从理解上,区分不可重复读与幻读,需要特别注意不同的隔离级别:

READ UNCOMMITTED :读未提交,在该隔离级别,所有事务都可以看到其他未提交事务的执行结 果。不能避免脏读、不可重复读、幻读。

READ COMMITTED :读已提交,它满足了隔离的简单定义:一个事务只能看见已经提交事务所做 的改变。这是大多数数据库系统的默认隔离级别(但不是MySQL默认的)。可以避免脏读,但不可重复读、幻读问题仍然存在。
        比如A事务正在crud,B事务在这个过程中update或者insert了数据并完成了提交,那么A事务在B提交前后两个时间点查到的数据是不一致的。

REPEATABLE READ :可重复读,事务A在读到一条数据之后,此时事务B对该数据进行了修改并提交,那么事务A再读该数据(很关键),读到的还是原来的内容。可以避免脏读、不可重复读,但幻读问题仍然存在。这是MySQL的默认隔离级别。

        解释:幻读问题仍然存在。
        是因为别的事务update要读取的数据,将不会被本次事务看到,由于MVCC版本控制,能一直回溯到数据记录当初的版本,避免不可重复读。
        但别的B事物添加进来几条数据,
还是可以读到的(但本次A事务明明没添加这些数据!所以幻读了)

SERIALIZABLE :可串行化,确保事务可以从一个表中读取相同的行。在这个事务持续期间,禁止其他事务对该表执行插入、更新和删除操作。所有的并发问题都可以避免,但性能十分低下。能避免:脏读、不可重复读和幻读。
        文章来源地址https://www.toymoban.com/news/detail-466446.html

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

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

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

相关文章

  • 哲学书籍推荐,一生不可不读的10本哲学书籍

    生活中有哲学的精神可以优化人的思维方式、提升人的精神境界,使得人能够不断超越自己。而读书能给予人一种生活无穷的乐趣和心灵的陶冶。 ⒈《作为意志和表象的世界》 “ 世界是我的意志,世界是我的表象。” 完成这本书的时候,叔本华只有28岁,这部后来影响了包

    2024年02月16日
    浏览(34)
  • 面试之可重复读是否可以解决幻读

    可重复读(repeatable read)定义:一个事务执行过程中看到的数据,总是跟这个事务在启动时看到的数据时是一致的。 不过理论上 是会出现幻读的,简单的来说幻读指的是当用户读取某一范围的数据行时,另外一个事务又在该范围插入了新行,当用户再次读取该范围的数据时会

    2024年02月16日
    浏览(33)
  • 【现代密码学基础】详解完美安全与不可区分安全

    目录 一. 介绍 二. 不可区分性试验 三. 不可区分性与完美安全 四. 例题 五. 小结 敌手完美不可区分,英文写做perfect adversarial indistinguishability,其中adversarial经常被省略不写,在密码学的论文中经常被简称为IND安全。 完美不可区分与香农的完美安全是类似的。该定义来源于一

    2024年01月21日
    浏览(53)
  • 密码学归约证明——选择明文攻击下的不可区分性

           运行生成密钥 ;输出给敌手,敌手可以访问预言机,并输出一对长度相等的消息;选择一个随机比特 ,计算出挑战密文交给 ;敌手继续访问预言机,输出一个比特;如果 ,则,成功。        对称密钥加密方案满足:如果对任意概率多项式敌手,存在可忽略函数

    2024年02月07日
    浏览(42)
  • gin自定义中间件解决requestBody不可重复读问题

    先直接上代码 注意,上面的中间件,需要在第一个执行。 在gin中,context.Request.Body 是一个io.ReadCloser的接口,如下图 查看io.ReadCloser接口定义 我们发现io.ReaderCloser接口的本质就是 Read(p []byte) (n int, err error) 和 Close() error 的组合。 所以我们只需要自己编写实现 Read(p []byte) (n in

    2024年02月01日
    浏览(79)
  • Kafka如何保证消息的消费顺序【全局有序、局部有序】、Kafka如何保证消息不被重复消费、Kafka为什么这么快?【重点】、Kafka常见问题汇总【史上最全】

    目录 Kafka消息生产 一个Topic对应一个Partition 一个Topic对应多个Partition Kafka消息的顺序性保证(Producer、Consumer) 全局有序 局部有序  max.in.flight.requests.per.connection参数详解 Kafka的多副本机制 Kafka的follower从leader同步数据的流程 Kafka的follower为什么不能用于消息消费 Kafka的多分区

    2024年04月11日
    浏览(51)
  • 广西学子复读15年,不服从分配。网友:完全是浪费时间

    唐尚珺的复读行为引起了网友们的不同解读。有人认为他是一个执念深重的人,目标是考上清华北大,但这个说法是否真实,我们无法确定。无论如何,我们必须认识到,考入清华北大这样的名校,虽然需要一定程度的努力,但更多的是靠天赋和运气。复读作为一种学习策略

    2024年02月16日
    浏览(39)
  • 高考考了657分想重新复读一年,又害怕白费一年

    高考考了657分想重新复读一年,又害怕白费一年。 如果你想重新复读一年,可能需要考虑到以下几点: 复读的代价:复读需要花费一年的时间和精力,而且这个过程中你可能会面临很多挑战和压力,包括学习上的、生活上的和心理上的。你需要做好充分的准备,有一个合理

    2024年02月12日
    浏览(37)
  • 开源 ChatFlow:让人类设计高质量流程,让 ChatGPT 生成与复读

    太长不读版:ChatFlow 作为一个正经的开源项目,现在你可以在 ClickPrompt 上完成一切工作以外的活动:角色扮演、玩游戏、看小说、AI 画画等等,如下图所示: 于是,我们抽取 ClickPrompt 出了的核心能力,构建了一个新的框架:ChatFlow —— 一个围绕 ChatGPT 构建的简易工作流引擎

    2023年04月21日
    浏览(114)
  • MySQL 幻读

    假设这样一个场景: 对于T3 查到的(0,0,5)不是幻读,T5查到的(1,1,5)才是幻读。( 幻读仅专指“新插入的行 ) 注:上面的图并不会实际发生,只是为了更好的引出问题而写的,实际上MySQL已经针对幻读问题做了解决方案(next-key lock下面讲),实际情况T5不会查到新

    2024年02月06日
    浏览(47)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包