隔离级别 脏读(Dirty Read) 不可重复读(NonRepeatable Read) 幻读(Phantom Read)
未提交读(Read uncommitted) yes yes yes
已提交读(Read committed) no yes yes
可重复读(Repeatable read) no no yes
可串行化(Serializable ) no no no
  • 未提交读(Read uncommitted):能读取到别的事务未提交的数据

  • 已提交读(Read committed):只能读取到别的事务已经提交的数据

  • 可重复读(Repeatable):在读取数据后直接加锁,其他事务无法修改和删除这些数据,但是防不住 insert 的新数据

  • 可串行化(Serializable):读取用读取锁,写入用写入锁,这两个锁互斥,这样能保证数据绝对安全,但是性能低下

  • 脏读(Dirty Read):可以读取到未提交的数据

  • 不可重复读(NonRepeatable Read):在读取完数据后数据又修改并 commit 了,导致第二次读取的数据与第一次数据不一致(重点在修改数据)

  • 幻读(Phantom Read):两次读取期间有新数据加入或者旧数据删除,导致不一致(重点在增删数据)