综述
隔离级别 | 脏读可能性 | 不可重复读可能性 | 幻读可能性 | 加锁读 | 性能 |
---|---|---|---|---|---|
READ UNCOMMITTED | Yes | Yes | Yes | No | 不会比其他级别好太多 |
READ COMMITED | No | Yes | Yes | No | |
REPEATABLE READ | No | No | Yes | No | |
SERIALIZABLE | No | No | No | Yes | 可能导致超时和所争用 |
-
READ UNCOMMITED(未提交读)
该级别中,一个事务的修改即使没有提交,对其他事务也是可见的:事务可以读取未提交的数据。
缺陷
读脏数据(Dirty Read):一个事务在开始后修改了某个数据,但是最后由于某些原因并没有commit,这次修改理论上应该是无效的,但其他事务却可能读取到修改后的值。
性能
不会比其他级别好太多。
-
READCOMMITTED(提交读)
是大多数数据库系统的默认隔离级别(但MySQL不是)。
事务从开始到提交之前,所作的修改对其他事务都是不可见的。
缺陷
*不可重复读:执行两次同样的查询,可能会得到不同的结果。
-
REPEATABLE READ(可重复读)
是MySQL的默认事务隔离级别。
解决了不可重复读和脏读问题。
缺陷
幻读:之前的事务在读取某个范围内的记录时,另外的事务在该范围内插入新数据时,之前的事务再次读取该范围的记录会产生幻行。
InnoDB和XtraDB存储引擎通过多版本并发控制(MVCC)解决幻读问题。
-
SERIALIZABLE(可串行化)
最高的隔离级别。强制事务串行执行,解决了幻读问题。
缺陷
可能导致大量超时和锁争用:SERIALIZABLE会在读取的每一行数据上都加锁。
网友评论