
马听,多年 DBA 实战经验,对 MySQL、 Redis、ClickHouse 等数据库有一定了解,专栏《一线数据库工程师带你深入理解 MySQL》、《Redis 运维实战》作者。
在有关 MySQL 的面试中,是不是 MVCC 经常会被问到?这节内容就来聊聊这个。
1 从一个实验讲起
create database likecolumn;
use likecolumn;
CREATE TABLE `t1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`a` int(11) NOT NULL,
`b` int(11) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_c` (`a`)
) ENGINE=InnoDB CHARSET=utf8mb4;
insert into t1(a,b) values (1,1),(2,2);
复制
序号 | session1 | session2 |
![]() | ||
![]() | ||
![]() | ||
2 什么是 MVCC
3 MVCC 的实现原理
ROW ID:隐藏的自增 ID,如果表没有主键,InnoDB 会自动按 ROW ID 产生一个聚集索引树。 事务 ID:记录最后一次修改该记录的事务 ID。 回滚指针:指向这条记录的上一个版本。

数据库会先对满足 a=1 的行加排他锁; 然后将原记录复制到 undo 表空间中; 修改 b 字段的值为 666,修改事务 ID 为 2; 并通过隐藏的回滚指针指向 undo log 中的历史记录; 事务提交,释放前面对满足 a=1 的行所加的排他锁。
本文已收录进 专栏《MySQL 高频面试题解析》
相关文章:
1. 一条 update 语句的生命历程
2. 当前读和快照读的区别
3. InnoDB 怎么做表空间迁移
4. RR 隔离级别下真的不会产生幻读吗?
5. MVCC 怎么实现的?
6. 复制的演进历程
7. 有哪些死锁场景?
8. 物理备份和逻辑备份的区别
最后修改时间:2020-11-12 18:51:05
文章转载自悦专栏,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1327次阅读
2025-03-13 11:40:53
MySQL8.0统计信息总结
闫建(Rock Yan)
500次阅读
2025-03-17 16:04:03
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
469次阅读
2025-03-13 14:38:19
SQL优化 - explain查看SQL执行计划(一)
金同学
397次阅读
2025-03-13 16:04:22
MySQL突然崩溃?教你用gdb解剖core文件,快速锁定“元凶”!
szrsu
377次阅读
2025-03-13 00:29:43
MySQL生产实战优化(利用Index skip scan优化性能提升257倍)
chengang
330次阅读
2025-03-17 10:36:40
MySQL数据库当前和历史事务分析
听见风的声音
302次阅读
2025-04-01 08:47:17
MySQL 生产实践-Update 二级索引导致的性能问题排查
chengang
250次阅读
2025-03-28 16:28:31
一键装库脚本3分钟极速部署,传统耗时砍掉95%!
IT邦德
240次阅读
2025-03-10 07:58:44
墨天轮个人数说知识点合集
JiekeXu
236次阅读
2025-04-01 15:56:03