四种隔离级别

查看隔离级别

  • MySQL 5.7及以下:SELECT @@SESSION.tx_isolation;
  • MySQL 8.0及以上:SELECT @@SESSION.transaction_isolation;

1. READ UNCOMMITTED(读未提交)

  • 允许脏读:可读取其他事务未提交的修改
  • 最高并发性,最低一致性
  • 适用场景:统计分析、实时监控

2. READ COMMITTED(读已提交)

  • 防止脏读,但可能出现不可重复读
  • 事务A第一次读取数据后,事务B修改并提交,事务A再次读取结果不同
  • 大多数数据库的默认级别

3. REPEATABLE READ(可重复读) - MySQL默认

  • 防止脏读和不可重复读
  • 可能出现幻读(由于MySQL的Next-Key Locking技术,幻读不一定能复现)

4. SERIALIZABLE(串行化)

  • 最高隔离级别,完全锁定读写,防止幻读
  • 性能最差,会极大降低执行效率

设置隔离级别

SET SESSION TRANSACTION ISOLATION LEVEL [事务级别];

隔离级别对比

隔离级别脏读不可重复读幻读
READ UNCOMMITTED
READ COMMITTED×
REPEATABLE READ××
SERIALIZABLE×××