✅ 什么是 MVCC?它是怎么实现的?(适合基础不牢固者)
一、MVCC 是什么?
MVCC 全称是:Multi-Version Concurrency Control,中文叫:多版本并发控制。
主要用于解决数据库的读写并发冲突问题,它的作用是让读操作无需加锁,也能读到符合事务隔离要求的数据版本。
你可以理解成:
💬「数据库里的一行数据,可能同时有多个版本,读操作可以看到一个旧版本,写操作操作一个新版本,从而实现读写不冲突。」
二、为什么要有 MVCC?
我们先想一个问题:
多个线程同时读写数据,如果每次都加锁,会不会很慢?
是的!所以:
-
✅ 为了让“读”不加锁、快速返回
-
✅ 为了让“写”不影响“读”
➡️ 引入了 MVCC 技术!
三、MVCC 是如何实现的?(以 MySQL InnoDB 为例)
InnoDB 使用 MVCC 实现了“事务隔离”中的:读已提交(Read Committed)和可重复读(Repeatable Read)。
实现的关键:隐藏字段 + undo log + 事务ID
🌱 每行记录背后都有两个隐藏的版本号字段:
字段名 | 说明 |
---|---|
trx_id | 当前修改这行记录的事务ID(记录这个版本是谁改的) |
roll_pointer | 指向 undo log(回滚日志)的指针,可以找到旧版本的值 |
🧩 举个真实场景:
假设数据库里有这样一行记录:
id = 1, name = "Alice", trx_id = 100