MySQL MVCC 交互演示
📊 Table: user_balance (id=1)
当前系统全局事务ID: 100
事务 A (TRX_ID: 200)
未开始
Read View:
m_ids: []
min_trx_id:
max_trx_id:
m_ids: []
min_trx_id:
max_trx_id:
事务 B (TRX_ID: 300)
未开始
Read View:
m_ids: []
min_trx_id:
max_trx_id:
m_ids: []
min_trx_id:
max_trx_id:
System 数据库初始化完成。默认隔离级别:RR (可重复读)
MVCC 核心机制
MySQL InnoDB 引擎通过 Undo Log 版本链 和 Read View 实现多版本并发控制。
版本可见性规则
- trx_id == creator_id: 自己修改的,可见。
- trx_id < min_trx_id: 已提交的旧事务,可见。
- trx_id > max_trx_id: 未来的新事务,不可见。
- trx_id in m_ids: 活跃中的未提交事务,不可见。
交互指南
- 点击 BEGIN 开启事务,生成 Read View (RR级别仅首次生成)。
- 点击 UPDATE 修改数据,会生成新的 Undo Log 版本节点(黄色未提交)。
- 点击 SELECT 执行快照读,系统会根据 Read View 遍历版本链找到可见版本。
- 尝试两个事务交替操作,观察“可重复读”效果。
* 为了简化演示,假设 TRX_ID 预分配为 200 和 300。
* 初始数据版本 TRX_ID = 10, 金额 = 1000。
* 初始数据版本 TRX_ID = 10, 金额 = 1000。