当前位置: 首页 > 知识库问答 >
问题:

可重复读取和可序列化的MySQL InnoDB实现之间的实际区别是什么

濮阳茂材
2023-03-14

根据 SQL 标准,可重复读取应防止模糊读取和脏读,而可序列化还应防止幻像读取。

根据MySQL文档:

默认情况下,InnoDB以可重复读取事务隔离级别运行。在这种情况下,InnoDB使用下一键锁进行搜索和索引扫描,这可以防止幻像行(参见14.2.2.5的“使用下一键锁避免幻像问题”一节)。

那么,如果可重复读取也可以防止幻像读取,那么序列化可以提供什么回报呢?

Serializable是否可以防止写歪斜或读歪斜,而Repeatable read则不能?

共有1个答案

阴宏爽
2023-03-14

答案也可以在mysql文档中找到,引用:

这个级别类似于可重复读取,但是InnoDB隐式地将所有普通的SELECT语句转换为SELECT...如果自动提交被禁用,则锁定在共享模式。如果启用了自动提交,则选择是它自己的事务。因此,它被认为是只读的,如果作为一致(非锁定)读取执行,则可以被序列化,并且不需要为其他事务阻塞。

当使用两阶段锁定实现时,可串行化事务调度可以防止读写偏差。这就是它在SQL Server上使用锁定或在PostgreSQL上使用可序列化快照隔离的工作方式。

如果在任何正在被读取的资源上获得了共享锁,那么读偏斜和写偏斜也会被防止。

 类似资料:
  • 本文向大家介绍Android中可打包和可序列化之间的区别,包括了Android中可打包和可序列化之间的区别的使用技巧和注意事项,需要的朋友参考一下 本示例演示了Android中可打包和可序列化之间的区别 可序列化 可序列化是一个可标记的接口,或者我们可以将其称为空接口。它没有任何预先实现的方法。可序列化将对象转换为字节流。因此,用户可以在一个活动到另一个活动之间传递数据。可序列化的主要优点是创建和

  • 问题内容: 从这个甲骨文的Java教程: 当事务A检索行,事务B随后更新该行,事务A随后再次检索同一行时,将发生不可重复的读取。事务A两次检索同一行,但看到不同的数据。 脏读和不可重复读之间有什么区别?是不是同一回事?由于其他人的更新而阅读错误的结果? 提前致谢。 问题答案: 完全相同的页面解释了什么是脏读: 访问尚未提交的更新值被视为脏读,因为该值可能会回滚到其先前的值。如果读取的值稍后会回滚,

  • 不可重复读取和幻像读取有什么区别? 我已经阅读了维基百科上的隔离(数据库系统)文章,但我有一些疑问。在下面的示例中,会发生什么:不可重复读取和幻像读取? ####交易A # # # #输出: ####交易B ####交易A 另一个疑问是,在上面的例子中,应该使用哪个隔离级别?为什么?

  • 我正在制作一个程序,并使用用户输入。当我得到一个字符串时,我总是使用. nextLine(),但我也使用了. Next(),它做同样的事情。有什么区别呢? 有什么区别?

  • 对于初学者,我希望将所有输入数据流转换为KeyedStreams。因此,我将输入数据流映射为一个元组,然后应用KeyBy将其转换为KeyStream。 我总是遇到序列化的问题,我试着按照本指南https://ci.apache.org/projects/flink/flink-docs-stable/dev/java_lambdas.html操作,但没有成功。 我想知道的是: null 测试类 错