1 READ UNCOMMITTED(会产生脏读)
读未提交:该隔离级别允许A事务在B事务修改某一行数据时读数据,因此B事务在修改数据后回滚时可能导致A事务读到被修改的数据。
2 READ COMMITTED(不会产生脏读,但会产生不可重复度)
读已提交:该隔离级别下,禁止在B事务修改某一行时A事务读数据,这样就可以避免脏读,但是不禁止A事务读某一行数据时B事务修改该行数据,导致A事务中两次读取该行数据时数据不同,即产生了不可重复读。
3 REPEATABLE READ(mysql默认隔离级别;不会产生脏读和不可重复读,但会产生幻读)
可重复读:该隔离级别下,禁止A事务在读某一行时B事务修改该行数据,这样可以避免不可重复读。
但是之前提到的都是对某一行数据进行加锁,如果A事务读取的是整个表的数据,整个表有五行数据,那么只能锁这五行数据,这个时候B事务依然可以进行insert 和delete操作导致A事务两次查询表数据结果不同,即产生了幻读。
4 SERIALIZABLE(不会产生幻读)
串行化:该隔离别下,强制事务进行排序,使之不会发生冲突,因此不会出现脏读、不可重复读和幻读问题,但执行效率低, 普遍采用REPEATABLE READ隔离模式。