什么是MVCC机制?

什么是MVCC机制?

什么是MVCC多版本并发控制机制

之前我们讲到,事务在并发环境下会带来脏读、脏写、不可重复读等诸多问题,为了解决这些问题,保证事务的ACID特性,出现了诸多隔离级别去解决这些问题,mysql默认采用的隔离级别是可重复读。那么mysql在可重复读隔离级别下如何保证事务的隔离性?答案是通过MVCC(Multi-Version Concurrency Control)机制来保证。

MVCC多版本并发控制机制如何保证隔离性

既然MVCC机制是用来保证隔离性的,那么它是如何保证隔离性的?是通过undo日志版本链与read view机制

undo日志版本链与read view机制

undo日志版本链

undo日志版本链是指,每个事务在修改完数据以后,记录一下之前的数据及它的事务id,新记录的数据指向之前的数据,形成一条版本链,这样在执行事务时,如果我们读到的不是之前的数据就可以进行回滚。
在这里插入图片描述

read view机制

undo日志版本链给我们提供了事务在不同阶段的执行结果,那么如何知道我们读取的不是之前的数据呢?是通过

read view机制实现的。其过程如下:
在这里插入图片描述

事务开启后首先生成一个视图数组,由当前未提交事务的最小、最大id和数据库中最大事务的id组成例如[60,80],100

1、如果当前的trx_id小于min_id,落在绿色部分,表示这个版本是已提交的事务生成的,这个数据是可见的。

2、如果当前的trx_id大于max_id,落在蓝色部分,表示这个版本是未提交的事务生成的(只要执行sql就会生成事务id,并不是提交才会生产事务id),这个数据是可见的。

3、如果 当前的 trx_id 落在红色部分(min_id <=trx_id<= max_id),那就包括两种情况

  • 若 row 的 trx_id 在视图数组中,表示这个版本是由还没提交的事务生成的,不可见。
  • 若 row 的 trx_id 不在视图数组中,表示这个版本是已经提交了的事务生成的,可见。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AmbitionsZoe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值