READ UNCOMMITTED(未提交读)
在 READ UNCOMMITTED 级别,事务中的修改,即使没有提交,对其他事务也都是可见
的。事务可以读取未提交的数据,这也被称为脏读(Dirty Read )。
READ COMMITTED(提交读,也叫不可重复读)
大多数数据库系统默认的隔离级别都是 READ COMMITTED (但MySQL不是),一个
事务从开始直到提交之前,所做的任何修改对其他事务都是不可见的。
REPEATABLE READ(可重复读)
解决了脏读的问题。该级别保证了在同一事务中多次读取同样记录的结果是一致的。但无
法解决幻读(Phantom Read)的问题,所谓幻读,指的是当某个事务在读取某个范围内
的记录时,会产生幻行。InnoDB和XtraDB存储引擎通过多版本并发控制MVCC解决了
幻读的问题。
MySQL的默认事务隔离级别。
SERIALIZABLE(可串行化)
SERIALIZABLE 是最高的隔离级别。它通过强制事务串行执行,避免了前面说的幻读的问
题。SERIALIZABLE 会在读取的每一行数据上都加锁,所以可能导致大量的超时和锁争用
的问题,实际中很少使用
事务级别 脏读 不可重复读 幻觉读
READ_UNCOMMITTED 允许 允许 允许
READ_COMMITTED 禁止 允许 允许
REPEATABLE_READ 禁止 禁止 允许
SERIALIZABLE 禁止 禁止 禁止