可重复读_MySQL 百问百答 之 可重复读中的快照

MySQL 百问百答 之 可重复读中的快照

  1. MySQL 中的视图
  • view 查询语句定义的虚拟表,在调用的时候执行查询语句并生成语句。
  • InnoDB实现MVCC 用的一致性读视图。
  1. 快照在MVCC里是怎么工作的

2.1 什么是快照

在可重复读隔离级别下,事务在启动的时候就拍了快照,这个快照基于整个库。

2.2 快照如何实现

  • InnoDB中每个事务有一个唯一的事务ID,transaction id,在事务开始的时候申请,严格递增。
  • 每行数据有多个版本,事务更新数据的时候,会生成新版本,并把事务ID赋值给该数据的事务ID。
5b02e3c2757353640a268c2875c1a094.png
  • 每行数据有两个版本信息:
    • 数据版本 V1,V2 ......
    • 事务版本 事务ID
  • 可重复读的定义是在事务启动和结束的这段期间,数据库的其他更新对当前事务不可见。
  • 可重复读实现原理是,以当前事务启动时刻为准,有事务ID x,如果数据版本 大于x则表示实在事务启动后的新版本数据,则对当前事务不可见。
  • 在事务A启动的时候,InnoDB为其构造了一个数组,保存了事务A启动瞬间,当前活跃的所有事务ID(活跃,事务已经开始,但是还没提交)。
  • 这个数据里面事务ID最小值记为低水位,最大值加1记为高水位。
7fb76fad583c5da500a0cc0bf6dafb5c.png

对于当前事务A:

  • 一个数据的版本小于低水位,则该数据的版本对事务A可见。
  • 一个数据的版本大于高水位,则该数据的版本对事务A不可见。
  • 如果数据的版本落在黄色区域:
    • 数据的版本在活跃事务数组中,表示该数据的版本还没提交,对当前事务A不可见。
    • 反之,对当前事务A可见。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值