事务隔离级别

隔离级别定义了一个事务与其他并发事务之间的隔离程度,用于解决并发事务可能产生的问题。

并发事务可能产生的问题

脏读-Dirty-Read不可重复读-Non-repeatable-Read幻读-Phantom-Read

四种隔离级别

READ_UNCOMMITTED(读未提交)

  • 允许读取未提交的数据
  • 可能出现脏读、不可重复读、幻读
  • 性能最好,但安全性最差

READ_COMMITTED(读已提交)

  • 只能读取已提交的数据
  • 防止脏读,但可能出现不可重复读、幻读
  • 互联网场景最常用,Oracle、SQL Server默认级别

REPEATABLE_READ(可重复读)

  • 同一事务内多次读取同一数据,结果一致
  • 防止脏读、不可重复读,但可能出现幻读
  • MySQL默认级别

SERIALIZABLE(串行化)

  • 事务完全串行化执行,最高隔离级别
  • 防止脏读、不可重复读、幻读
  • 性能最差,并发能力最低

隔离级别对比表

隔离级别脏读不可重复读幻读性能
READ_UNCOMMITTED 读未提交最高
READ_COMMITTED 读已提交
REPEATABLE_READ 可重复读
SERIALIZABLE 串行化最低

隔离级别的选择:

  • READ_COMMITTED:大多数互联网场景使用,防止脏读,性能较好
  • REPEATABLE_READ:需要保证同一事务内多次读取一致时使用
  • SERIALIZABLE:对数据一致性要求极高时使用,并发性能差

参考链接