- READ UNCOMMITTED (读未提交)
- 事务的修改即使没有提交,对其他事务也是可见的。
- 事务可以读取未提交的数据,这也被称为脏读(Dirty Read)
- 从性能上来说,Read Uncommitted不会比其他级别高太多,但是却缺乏其他级别的很多好处,所以在实际应用中很少用
- READ COMMITTED (读提交)
- 大多数数据库的默认隔离级别(但MySQL不是)
- 满足隔离性的简单定义:一个事务开始时,只能看见已经提交的事务所做的修改。也就是说,一个事务从开始到提交之前,所做的任何修改对其他事务都是不可见的
- 这个隔离级别也被叫做不可重复读(nonrepeatable read),
- REPEATABLE READ (可重复读)
- 解决了脏读的问题,该级别保证同一个事务多次读取同行的记录结果是一样的。
- 无法解决另一个幻读(Phantom Read)的问题,即某个事务A读取某部分数据时,另一个事务在这部分数据中插入了新的记录,当A再去读取该部分数据时,会产生幻行(Phantom Row)
- InnoDB通过多版本并发控制来解决了幻读的问题
- SERIALIZABLE (可串行化)
- 是最高的隔离级别。通过强制事务串行化执行,避免了幻读问题
- 简单说,会在读取的每行数据上都加锁,所以会导致大量的超时和锁争用的问题