InnoDB 通过 MVCC(多版本并发控制) 实现可重复读(RR)隔离级别:每行记录隐藏 DB_TRX_ID 与 DB_ROLL_PTR 字段,旧版本数据保留在 Undo Log 中形成版本链,快照读通过 Read View 判断行的可见性。
一、Read View 可见性判定核心逻辑
sql
-- 查看当前活动事务与隔离级别
SELECT @@transaction_isolation;
SELECT * FROM information_schema.innodb_trx;
-- 模拟:事务 A 开启快照读,事务 B 更新同一条记录
-- 事务 A(RR 隔离级别)
START TRANSACTION WITH CONSISTENT SNAPSHOT;
SELECT balance FROM accounts WHERE id = 1; -- 读取历史快照版本
-- 事务 B
UPDATE accounts SET balance = balance + 100 WHERE id = 1;
COMMIT;
-- 事务 A 再次读取,仍看到旧版本(可重复读)
SELECT balance FROM accounts WHERE id = 1;
COMMIT;