大话Mysql四:Mysql事务之MVCC多版本并发控制

一、Mysql mvcc 就是在一个事务开启之前对其数据进行快照备份,通过读取快照的方式来确保同一个事务前后读取到的数据是相同的,这就叫多版本的并发控制
MVCC 多版本并发控制规则:
1、一个事务能看到的数据版本:
(1)、第一个查询之前已经提交的事务
(2)、本事务的修改
2、一个事务无法看到的版本:
(1)、第一个查询之后创建的事务(事务ID相较于当前事务Id要大的事务)
(2)、活跃(未提交)的事务的修改

二、MVCC 原理

Innodb引擎为每行记录都实现了两个隐藏字段: DB_TRX_ID 和 DB_ROLL_PTR ,分别为 事务ID 6个字节 和 事务回滚指针 7个字节,事务ID是记录当前事务的唯一ID编号的,而回滚指针则是记录 被删除或记录为旧数据的事务的ID所以又被称之为事务版本号,当没有修改或者是删除的时候就是空 NULL

截图示例如下:

在这里插入图片描述

所有的事务的操作产生的数据都会被记录在undo log 日志里面,事务回滚指针指向的其实就是undo log 链,并且事务在具体去undo log 链中去拿取指定的数据的时候会维护一个自己的 Read View ,中文名叫做可见性视图,记录了活跃事务ID,最大事务id,最小事务id,创建该视图的事务id,如下图所示:

在这里插入图片描述
根据 read view 的数据结构类型可知接下来的判断规则是这样子的:
1、从数据的最早版本开始判断,一般是最新的undo log链开始判断
2、trx_id > max_trx_id 则说明该事务是生成read view之后才开启的版本,无法查看其数据
3、trx_id < min_trx_id 则说明该事务是生成read view之前已经提交,可以访问其数据
4、trx_id = creator_id 则说明是本事务的修改操作,可以查看到本事务的数据
5、倘若在 max 和 min 事务id之间则判断其是否在 m_ids{}中,如果在则说明是活跃事务则不能查看,反之可以查看
6、倘若当前版本不可见就找下一个版本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值