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 沿版本链往前找,直到找到第一个可见版本。

浙公网安备 33010602011771号