MySql数据库隔离级别 MVCC

事务级别 事务特征
读未提交 RU 脏读、幻读 、不可重复读
读已提交 RC 幻读 、不可重复读
可重复读 RR 通过MVCC同一事务中的一致性读通常保持相同快照
串行化 提供更强的串行化约束,并可能显著增加锁等待

MVCC

每行隐藏版本字段 + Undo Log 版本链 + Read View 可见性判断;RR 下第一次快照读固定 Read View,RC 下每次快照读重新生成 Read View;它只作用于快照读,当前读仍然加锁。

Read View

Read View:判断“这个版本我能不能看”
Read View 是快照读时生成的一个内存结构,主要包含:
m_ids:生成时活跃未提交事务 ID 集合;
min_trx_id:活跃事务中最小 ID;
max_trx_id:下一个待分配事务 ID;
creator_trx_id:当前事务自己的 ID。
可见性判断规则:
DB_TRX_ID == creator_trx_id:自己改的,可见;
DB_TRX_ID < min_trx_id:快照前已提交,可见;
DB_TRX_ID >= max_trx_id:快照后才启动,不可见;
min_trx_id <= DB_TRX_ID < max_trx_id:在 m_ids 中不可见,不在则可见。
如果当前版本不可见,就顺着 DB_ROLL_PTR 沿版本链往前找,直到找到第一个可见版本。

posted @ 2026-10-20 12:28  程序小小猿  阅读(2)  评论(0)    收藏  举报