MVCC(Multi-Version Concurrency Control,多版本并发控制) 是现代关系型数据库(如 MySQL InnoDB、PostgreSQL、Oracle 等)用来实现高并发读写的核心机制。它的目标是:读不阻塞写,写不阻塞读,从而提升并发性能。
下面从“为什么需要 → 核心思想 → 实现原理 → 典型例子”来说明。
在传统锁机制下:
这会导致:
MVCC 的思路是:不改数据本身,而是保存多个版本,让不同事务看到不同版本的数据。
事务在某一时刻,只能看到“它应该看到的数据版本”
也就是:
InnoDB 每行记录中隐藏了:
DB_TRX_ID:最近修改该行的事务 IDDB_ROLL_PTR:回滚指针,指向 undo log 中的旧版本最新版本 → 上一版本 → 上上版本 → ...
transaction_id对于某一行数据版本:
DB_TRX_ID:
roll_ptr 找上一个版本SELECTSELECT * FROM user;
SELECT * FROM user FOR UPDATE;
UPDATE user SET ...;
事务 A(ID=10):
BEGIN;
SELECT name FROM user WHERE id=1; -- 看到 Tom
事务 B(ID=11):
BEGIN;
UPDATE user SET name='Jack' WHERE id=1;
COMMIT;
事务 A 再查:
SELECT name FROM user WHERE id=1;
Tom✅ 读不加锁
✅ 读写不互斥
✅ 提高并发性能
✅ 避免脏读、不可重复读(RC / RR 级别)
如果你愿意,我也可以:
你想从哪个角度继续?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。