InnoDB事务隔离级别

前因后果

  • 由来:为了解决并发事务带来的问题,隔离级别定义了并发事务间的相互影响程度;
  • 结果:不同的隔离级别应用于不同场景,常用RR(MySQL默认)和RC;
  • 实现:基于MVCC和锁实现;

InnoDB事务隔离级别

分类

  按照并发事务间相互影响的程度,事务隔离级别分成如下四种:

  • 读未提交(Read Uncommitted):允许事务A读取其它事务未提交的记录,会发生脏读、不可重复读、幻读;
  • 读已提交(Read Committed):只允许事务A读取其它事务已提交的记录,不会发生脏读,但会出现重复读、幻读;
  • 可重复读(Repeatable Read):事务A执行期间,多次相同查询结果一致,不会发生脏读和不可重复读的问题,但会发生幻读问题;但InnoDB在RR隔离级别下利用MVCC或者间隙锁可以禁止幻读问题的发生
  • 可串行化(Serializable):即事务串行执行,以上各种问题自然也就都不会发生。

InnoDB事务隔离级别

实现

  不同数据库对于SQL标准中规定的隔离级别支持是不一样的。相对于传统隔离级别基于锁的实现方式,InnoDB引擎基于MVCC和行级锁实现事务隔离级别:通过MVCC无锁方案,解决事务读写并发问题,通过两阶段锁来实现写-写并发控制;
InnoDB事务隔离级别

参考:

  1. 浅谈MySQL并发控制:隔离级别、锁与MVCC