数据库隔离级别¶
一、三种问题¶
脏读¶
读到未提交的数据。
不可重复读¶
同一事务内,两次读结果不一样(别人 update)。
幻读¶
同一事务内,两次读行数不一样(别人 insert)。
二、四个隔离级别¶
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|---|---|---|
| 读未提交 | ✅ | ✅ | ✅ |
| 读已提交 | ❌ | ✅ | ✅ |
| 可重复读 | ❌ | ❌ | ✅(InnoDB 解决) |
| 串行化 | ❌ | ❌ | ❌ |
三、MySQL 默认¶
可重复读(REPEATABLE READ)。
四、Oracle 默认¶
读已提交(READ COMMITTED)。
五、怎么选¶
- 金融:串行化/可重复读。
- 互联网:读已提交。
六、MVCC¶
可重复读靠 MVCC 实现。
一句话
RC 防脏读,RR 防不可重复读,串行化防幻读。