MySQL 百问百答 之 事务隔离

MySQL 百问百答 之 事务隔离

1. MySQL 中的视图

  • view 查询语句定义的虚拟表,在调用的时候执行查询语句并生成语句。
  • InnoDB实现MVCC 用的一致性读视图。

2. 快照在MVCC里是怎么工作的

2.1 什么是快照

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

2.2 快照如何实现

  • InnoDB中每个事务有一个唯一的事务ID,transaction id,在事务开始的时候申请,严格递增。

  • 每行数据有多个版本,事务更新数据的时候,会生成新版本,并把事务ID赋值给该数据的事务ID。

image-20201019081548598

  • 每行数据有两个版本信息:

    • 数据版本 V1,V2 …
    • 事务版本 事务ID
  • 可重复读的定义是在事务启动和结束的这段期间,数据库的其他更新对当前事务不可见。

  • 可重复读实现原理是,以当前事务启动时刻为准,有事务ID x,如果数据版本 大于x则表示实在事务启动后的新版本数据,则对当前事务不可见。

  • 在事务A启动的时候,InnoDB为其构造了一个数组,保存了事务A启动瞬间,当前活跃的所有事务ID(活跃,事务已经开始,但是还没提交)。

  • 这个数据里面事务ID最小值记为低水位,最大值加1记为高水位。

在这里插入图片描述

对于当前事务A:

  • 一个数据的版本小于低水位,则该数据的版本对事务A可见。
  • 一个数据的版本大于高水位,则该数据的版本对事务A不可见。
  • 如果数据的版本落在黄色区域:
    • 数据的版本在活跃事务数组中,表示该数据的版本还没提交,对当前事务A不可见。
    • 反之,对当前事务A可见。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值