**MVCC 快照读(Snapshot Read)**是数据库(尤其是 MySQL InnoDB)中一种基于 多版本并发控制(MVCC,Multi-Version Concurrency Control) 的读取方式。
下面用通俗的方式解释这个概念。
MVCC 的核心思想是:
对一行数据的修改不直接覆盖旧值,而是保留多个版本,读和写互不阻塞。
每条记录在 InnoDB 中通常会有:
这样,不同事务在同一时刻可以看到不同“版本”的数据。
快照读:
事务在读取数据时,读取的是事务开始时的数据快照(一致性视图),而不是最新提交的数据。
也就是说:
以 MySQL InnoDB 为例:
| 对比项 | 快照读 | 当前读 |
|---|---|---|
| 是否加锁 | 否 | 是 |
| 读的是什么 | 历史快照 | 最新数据 |
| 例子 | SELECT |
SELECT ... FOR UPDATE |
| 是否可能被阻塞 | 否 | 是 |
示例:
-- 快照读
SELECT * FROM user WHERE id = 1;
-- 当前读
SELECT * FROM user WHERE id = 1 FOR UPDATE;
✅ 提高并发性能
✅ 避免读阻塞写、写阻塞读
✅ 实现 可重复读(RR) 和 读已提交(RC)
SELECT 查询MVCC 快照读就是:在不加锁的情况下,读取事务开始那一刻的数据“照片”,实现高并发、非阻塞读。
如果你愿意,我也可以结合 InnoDB 的 Read View 实现细节 或 和幻读的关系 再深入讲。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。