MySQL 的 MVCC(多版本并发控制,Multi-Version Concurrency Control) 是 InnoDB 存储引擎用来实现高并发下数据一致性和事务隔离的核心机制之一。MVCC 允许多个事务同时读取同一份数据而互不阻塞,是 MySQL 性能的关键所在。
📌 MVCC 是什么?
MVCC = Multi-Version Concurrency Control
即:在读取数据时,数据库不直接返回最新的数据行,而是返回当前事务可见的某个历史版本的数据副本。
MVCC 主要用于实现 SQL 标准中的 READ COMMITTED 和 REPEATABLE READ 两种隔离级别(InnoDB 默认是 REPEATABLE READ)。
🧩 MVCC 背后的原理:隐藏字段 + Undo Log
InnoDB 表的每一行记录都有两个隐藏字段:
-
trx_id
:记录这条数据是哪个事务插入的 -
roll_pointer
:回滚指针,指向 Undo Log 中的历史版本
🚨 注意:这些字段是 InnoDB 自动管理的,不需要开发者手动添加。
📦 Undo Log:MVCC 的数据快照来源
每次事务对数据的 UPDATE
或 DELETE
操作,InnoDB 都会记录一份旧数据副本到 Undo Log 中。这样在需要读取旧版本时,就可以从 Undo Log 回溯得到可见版本。
Undo Log 保证了:
-
可以读取某个时刻的数据版本