四种隔离级别
查看隔离级别
- MySQL 5.7及以下:
SELECT @@SESSION.tx_isolation;
- MySQL 8.0及以上:
SELECT @@SESSION.transaction_isolation;
1. READ UNCOMMITTED(读未提交)
- 允许脏读:可读取其他事务未提交的修改
- 最高并发性,最低一致性
- 适用场景:统计分析、实时监控
2. READ COMMITTED(读已提交)
- 防止脏读,但可能出现不可重复读
- 事务A第一次读取数据后,事务B修改并提交,事务A再次读取结果不同
- 大多数数据库的默认级别
3. REPEATABLE READ(可重复读) - MySQL默认
- 防止脏读和不可重复读
- 可能出现幻读(由于MySQL的Next-Key Locking技术,幻读不一定能复现)
4. SERIALIZABLE(串行化)
- 最高隔离级别,完全锁定读写,防止幻读
- 性能最差,会极大降低执行效率
设置隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL [事务级别];
隔离级别对比
| 隔离级别 | 脏读 | 不可重复读 | 幻读 |
|---|
| READ UNCOMMITTED | ✓ | ✓ | ✓ |
| READ COMMITTED | × | ✓ | ✓ |
| REPEATABLE READ | × | × | ✓ |
| SERIALIZABLE | × | × | × |