简识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的生成时机和更新策略,从而决定了事务在执行快照读操作时能够看到的数据快照。

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

相关推荐
百锦再5 分钟前
时序数据库选型指南:大数据时代的“数据基建”与 IoTDB 的工业原生之路
大数据·数据库·mysql·oracle·sqlserver·时序数据库·iotdb
小碗羊肉6 分钟前
【MySQL | 第一篇】数据库和表的基本操作(DDL语句)
数据库·mysql
四维迁跃8 分钟前
MySQL触发器处理死锁的防范方法_MySQL高并发触发器优化
jvm·数据库·python
weixin_4087177711 分钟前
golang如何实现API压测工具_golang API压测工具实现攻略
jvm·数据库·python
敲敲千反田11 分钟前
redis常见问题
数据库·redis·缓存
人道领域13 分钟前
【Redis实战篇】秒杀系统:一人一单高并发实战(synchronized锁实战与事务失效问题)
java·开发语言·数据库·redis·spring
weixin_4249993616 分钟前
Redis怎样利用Lua脚本批量抓取多类型数据
jvm·数据库·python
yeyuningzi16 分钟前
如何解决海量数据库许可过期导致的无法启动问题
数据库·海量数据库
2301_8176722617 分钟前
Golang怎么写TODO待办应用_Golang TODO应用教程【深入】
jvm·数据库·python
2301_8176722617 分钟前
PHP源码开发用一体机合适吗_集成硬件局限性说明【操作】
jvm·数据库·python