数据库隔离级别

事务的特性

  • 原子性
    较低的级别的通常可以执行更高的并发

READ UNCOMMITED(未提交读)

事务中的修改,即使没有提交,对其他事务也都是可见的。事务可以读取未提交的事务,这也叫脏读
因为性能不会比其他级别好太多,一般很少用

READ COMMITED(提交读)

大多数数据库系统的默认隔离级别(MySQL不是),一个事务开始时,只能“看见”自己已经提交的事务所做的修改,提交之前的修改对其他事务都是不可见的。
该隔离级别也叫不可重复读,因为执行两次查询,可能得到不一样的结果

REPEATABLE READ(可重复读)

保证一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据,但不能避免产生幻读。

幻读:指当前的事务在读取某个符合条件范围的记录时,另外一个事务又在该范围内插入了新的记录,导致当前事务再次读取该范围的记录时,发现多了N条数据(幻行)

SERIALIZABLE(可串行化)

最高的隔离级别,强制事务串行执行,避免了幻读问题。SERIALIZABLE会在读取每一行数据上都加上锁,所以可能导致大量的超时和锁争用问题。

隔离级别 脏读 不可重复读 幻读 读锁
READ UNCOMMITED Yes Yes Yes No
READ COMMITTED No Yes Yes No
REPEATABLE READ No No Yes No
SERIALIZABLE No No No Yes