《Mysql进阶》-- Mysql的MVCC机制详解

MVCC是MySQL在读已提交和可重复读隔离级别下实现的并发控制机制。它包括undo日志、记录版本链和read-view三部分。undo日志记录每次修改的历史版本,记录版本链则通过事务ID和回滚指针形成链表。read-view则在事务开始时生成,用于确定可见性。RC隔离级别下每次查询都有新视图,而RR隔离级别只在第一次查询时生成视图。这使得RC能看到所有提交记录,而RR不会看到首次查询后提交的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MVCC--多版本并发控制机制(Multi-Version Concurrency Control)

Mysql的MVCC指多版本并发控制,Myql在读已提交和可重复读隔离级别下都实现了MVCC机制。保证了mysql在RC和RR事务隔离级别下读取数据的隔离性。
MVCC由三部分组成实现:
undo日志:回滚日志,mysql每修改记录一次,无论是否提交均会按修改时间顺序把记录记在一个日志文件中,这个文件称为undo日志。
记录版本链:对于Innodb引擎的表中有三个隐藏字段,主键、操作事务id、回滚指针。如果表中没有可选的主键,那么会自动插入一个6B的主键。操作事务Id记录操作这条记录的事务Id。回滚指针指向该记录的上一个版本。这个记录共同构成了记录版本链表。undo日志存放的内容就是记录版本链。

read-view: 一致性视图,它记录的mysl当前的事务执行情况。主要有4个参数组成。    

MVCC的工作流程

  1. 开启事务,什么都没做。

  2. 执行第一个查询语句时生成read view视图,此时会生成一个16位的假事务Id。

  3. 执行第一个加锁的操作如增删改、当前读操作都会生成真正的事务Id,并获取最新的readview视图。

 4. 再执行一次不加锁的查询,能否获取到最新的readview视图与事务隔离级别有关。

  4. 以当前事务Id、readview视图与记录的事务Id做对比,得出可查看的记录。

RC和RR隔离级别下MVCC的区别:

  1. RC隔离级别下每次查询均会生成新的readview视图,所以它能看所有提交的记录。

  2. RR隔离级别下只有第一次查询会生成readview视图,后面所有查询共用之前的readview视图。所以它读不到第一次查询后提交的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

季风泯灭的季节

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

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

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

打赏作者

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

抵扣说明:

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

余额充值