欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

MySQL InnoDB 事务隔离级别与 MVCC 快照读

发表于:|最后更新:|分类:数据库与存储|阅读:3041 次
本文标签:MVCCMySQLInnoDB

InnoDB 通过 MVCC 与锁机制实现四种事务隔离级别。理解快照读(Snapshot Read)与当前读(Current Read)的差异是排查幻读问题的前提。

一、四种隔离级别对比

隔离级别 脏读 不可重复读 幻读
READ UNCOMMITTED 可能 可能 可能
READ COMMITTED 否 可能 可能
REPEATABLE READ 否 否 InnoDB 下基本避免
SERIALIZABLE 否 否 否

二、快照读与当前读

sql
-- 快照读:读取 undo log 构建的历史版本
SELECT * FROM users WHERE id = 1;

-- 当前读:读取最新版本并加锁
SELECT * FROM users WHERE id = 1 FOR UPDATE;

InnoDB 在 REPEATABLE READ 下通过间隙锁(Gap Lock)与 Next-Key Lock 阻止幻读,但快照读不受锁影响,仍可能读到事务开始时的旧快照。