InnoDB事务隔离级别

本文介绍了InnoDB事务隔离级别的概念,包括读未提交、读已提交、可重复读和可串行化,详细阐述了MySQL默认的RR(可重复读)隔离级别下如何利用MVCC和锁避免并发问题,以及RC实现的区别。分析了各隔离级别对并发事务的影响,如脏读、不可重复读和幻读,并讨论了InnoDB如何通过MVCC和行级锁实现高并发下的事务处理。
摘要由CSDN通过智能技术生成

前因后果

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

在这里插入图片描述

分类

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

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

在这里插入图片描述

实现

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

RR实现
  1. 对于普通select语句,基于MVCC实现。普通select使用快照读,同一事务内使用相同版本的数据快照(解决不可重复度);
  2. 对于带锁select和写操作,基于锁实现。通过Record Lock锁定某条记录,使用Gap Lock防止区间内插入新数据(解决幻读);

在这里插入图片描述

RC实现
  1. 对于普通select语句,基于MVCC实现。普通select使用快照读,每次查询使用已提交的新版本数据快照(导致不可重复读);
  2. 对于带锁select和写操作,基于锁实现。通过Record Lock锁定某条记录,RC隔离级别中不存在Gap Lock(导致幻读);
    在这里插入图片描述

参考:

  1. 浅谈MySQL并发控制:隔离级别、锁与MVCC
  2. 4种事务的隔离级别,InnoDB如何巧妙实现?
  3. MySQL事务和锁机制详解
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值