加载中...

| MySQL InnoDB 默认 | 可重复读(Repeatable Read) |
| Oracle/PostgreSQL 默认 | 读已提交(Read Committed) |
| 最高级别 | 串行化(Serializable) |
SQL 标准(ISO/IEC 9075)通过三种并发异象来定义隔离级别:
读未提交(Read Uncommitted)三种异象都可能发生;读已提交(Read Committed)消除了脏读;可重复读(Repeatable Read)消除了脏读和不可重复读;串行化(Serializable)全部消除。Oracle 默认 RC,MySQL InnoDB 默认 RR,PostgreSQL 默认 RC。[1]
InnoDB 的可重复读级别通过 MVCC 而不是锁来避免幻读——普通 SELECT 读的是事务开始时的快照,所以不会看到其他事务新插入的行。但如果用 SELECT ... FOR UPDATE(当前读),就会加 Next-Key Lock 来阻止幻读,此时行为接近串行化。
PostgreSQL 13 起的 Serializable Snapshot Isolation(SSI)实现了真正的串行化,同时比传统悲观锁方案有更好的并发性,其理论基础来自 Cahill 等人 2008 年的论文。

| MySQL InnoDB 默认 | 可重复读(Repeatable Read) |
| Oracle/PostgreSQL 默认 | 读已提交(Read Committed) |
| 最高级别 | 串行化(Serializable) |
登录 后参与讨论
暂无讨论,来发表第一条评论吧