简识MySQL中ReadView、RC、RR的关系

一、背景

在MySQL中,ReadView是事务进行快照读操作时生成的读视图,它用于确定哪些数据对当前事务是可见的。ReadView的生成和属性受MySQL事务隔离级别的影响,特别是RC(Read Committed,读已提交)和RR(Repeatable Read,可重复读)这两个级别。

二、详解

对于ReadView中哪个属性是由MySQL的事务隔离级别RC、RR设置来起作用的,可以明确的是:ReadView的生成时机和更新策略是由事务隔离级别RC和RR来决定的。具体来说:

在RC隔离级别下:

  • 每个快照读操作都会生成并获取最新的ReadView。这意味着,在同一个事务中,如果执行了多次快照读操作,那么每次操作都会看到一个可能不同的数据快照,因为每次都会根据当前活跃的事务ID列表来生成新的ReadView。

在RR隔离级别下:

  • 同一个事务中的第一个快照读会创建ReadView,之后的快照读获取的都是同一个ReadView。这意味着,在同一个事务中,无论执行多少次快照读操作,它们都会看到一个相同的数据快照,因为ReadView在事务开始后只生成一次,并且不会随着事务的进行而更新。

因此,虽然ReadView本身包含多个属性(如trx_list、up_limit_id、low_limit_id等),但这些属性的值是由事务的快照读操作在生成ReadView时根据当前系统状态确定的。而ReadView的生成时机和更新策略,则是由MySQL的事务隔离级别RC和RR来控制的。

总的来说,事务隔离级别RC和RR通过影响ReadView的生成时机和更新策略,从而决定了事务在执行快照读操作时能够看到的数据快照。

(望各位潘安、各位子健不吝赐教!多多指正!🙏)

相关推荐
DB哥讲数据库3 分钟前
【达梦数据库安装教程】超详细图文讲解-附达梦安装包
数据库·oracle
Hoxy.R1 小时前
【金仓数据库产品体验官】KingbaseES V9R2C16 坏块检测与修复完整测试流程
数据库
高级程序源2 小时前
SSM仓储管理系统31582-计算机课程设计、毕业设计
vue.js·python·mysql·小程序·flask·课程设计
PC2005-cloud2 小时前
MySQL学习笔记:GTID 主从复制,从原理到实践,告别传统 Binlog+Position 的痛点
笔记·学习·mysql
太理摆烂哥2 小时前
MySQL数据库基础
数据库·mysql
wuhuhuan2 小时前
JMeter 连接数据库并取值(JDBC 实战)
数据库·jmeter
小羊没烦恼!3 小时前
OS X 上使用.NET开发应用程序
开发语言·前端·数据库·人工智能·c#·策略模式
Rain的Java大神之路3 小时前
[特殊字符]8年Java老兵转型AI Agent:90%的人挂在同一个坑,根本不用学Python!(万字实战复盘,建议收藏)
java·数据库·人工智能·后端·python·spring·ai编程
高级程序源4 小时前
springboot本地生活服务平台33399-计算机课程设计、毕业设计
vue.js·spring boot·python·mysql·小程序·flask·课程设计
码途行者4 小时前
缓存一致性难题:Redis 和数据库如何做到数据一致?
数据库·redis