MySQL的MVCC机制实现READ COMMITTED和 REPEATABLE READ隔离级别

14 篇文章 0 订阅
订阅专栏

MVCC实现依赖于 —— undo日志、隐藏字段、ReadView

MVCC,多版本的并发控制,Multi-Version Concurrency Control

undo日志:

例子:表中本来有记录(1,张三,一班)

 事务10更新记录:(1,李四,一班)后又更新(1,王五,一班)

事务20更新记录:(1,钱七,一班)又更新(1,宋八,一班)

此时记录修改了四次,undo日志形成版本链:

隐藏字段:

 每行记录后面保存两个隐藏的列:一个保存了行的事务ID(TRX_ID),一个保存了行的回滚指针(ROLL_POINTER)

 ReadView:

RU(READ UNCOMMITTED) 不处理,所有事务直接读取数据库的最新值即可。SERIALIZABLE 隔离级别对所有操作加锁

 RC(READ COMMITTED) 和 RR(REPEATABLE READ) 隔离级别的实现是通过版本控制来完成。两种隔离界别下的核心处理逻辑就是通过ReadView判断所有版本中哪个版本是当前事务可见的处理。

ReadView中主要包含当前系统中还有哪些活跃的读写事务,把它们的事务id放到一个列表中,我们把这个列表命名为为m_ids

  • 使用READ COMMITTED隔离级别的事务在每次查询开始时都会生成一个独立的 ReadView。
  • REPEATABLE READ 隔离级别的事务在第一次读取数据时生成一个ReadView。

例子:

1、READ COMMITTED隔离级别(解决脏读)

 2、REPEATABLE READ 隔离级别(解决不可重复读)

  2、REPEATABLE READ 隔离级别(解决幻读)

 

比较:RC,RR级别下的InnoDB快照读有什么不同?
读已提交(RC):RC隔离级别下,每个快照读都会生成并获取最新的Read View,每次都读取undo log中最近的版本,因此两次对同一字段的读可能读到不同的数据(不可重复读),但能保证每次都读到最新的数据。

可重复读(RR):在RR隔离级别下,则是同一个事务中的第一个快照读才会创建Read View, 之后的快照读获取的都是同一个Read View。每次都读取undo log指定的版本,这样保证不会产生幻读,但可能读不到最新的数据。

总结:(MVCC机制原理) 

MVCC机制的实现就是通过read-view机制与undo版本链比对机制,使得不同的事务会根据数据版本链对比规则读取同一条数据在版本链上的不同版本数据。MVCC使得数据库读不会对数据加锁,提高了数据库的并发处理能力。借助MVCC,数据库可以实现READ COMMITTED,REPEATABLE READ等隔离级别,用户可以查看当前数据的前一个或者前几个历史版本,保证了ACID中的I特性(隔离性)。

关于Mysql隔离级别、锁与MVCC介绍
09-09
总结来说,MySQL通过隔离级别、锁和MVCC这三大机制实现了在高并发环境下的数据一致性、可靠性和并发性能。理解这些机制的原理和相互关系,有助于在实际应用中做出合适的配置选择,提升数据库的性能和稳定性。
多版本并发控制(MVCC)
小码农想做大架构的博客
04-25 259
Mysql多版本并发控制(MVCC)介绍
MVCC(多版本并发控制)
weixin_52793468的博客
05-27 891
mvcc,也就是多版本并发控制,是为了在读取数据时不加锁来提高读取效率和并发性的一种手段。数据库并发有以下几种场景:读-读:不存在任何问题。读-写:有线程安全问题,可能出现脏读、幻读、不可重复读。写-写:有线程安全问题,可能存在更新丢失等。mvcc解决的就是读写时的线程安全问题,线程不用去争抢读写锁。mvcc所提到的读是快照读,也就是普通的select语句。快照读在读写时不用加锁,不过可能会读到历史数据。还有一种读取数据的方式是当前读,是一种悲观锁的操作。
mysql面试关键知识点:undo log
u013905744的专栏
01-21 811
undo log基础 大家都知道,数据库的四个隔离级别。有一个情况大家也熟悉:即RCRR两种隔离级别下的不同可见性,即不可重复读问题。 不可重复读的含义是事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据做了更新并提交,导致事务A多次读取时数据不一致 在RC隔离级别下,伪代码 session1 start transaction; session2 start transact...
看完不信你还不懂MVCC原理详解
Java_ttcd的博客
08-06 638
指的是一种提高并发的技术。最早的数据库系统,只有读读之间可以并发,读写,写读,写写都要阻塞。引入多版本之后,,其他三种操作都可以并行,这样大幅度提高了InnoDB的并发度。在内部实现中,InnoDB通过undo log保存每条数据的多个版本,并且能够找回数据历史版本提供给用户读,每个事务读到的数据版本可能是不一样的。在同一个事务中,用户只能看到该事务创建快照之前已经提交的修改和该事务本身做的修改。...
mysql mvcc机制rc_mvcc如何实现RCRR
weixin_42097369的博客
01-19 1259
问题已解决。答案如下1.在innodb的RCRR模式下,快照读读不到事务未提交的数据。具体是通过Readview实现。术语是readview,用白话说就是,记录了未提交事务的表,事务会依据该表选择合适的行版本号进行快照读操作,具体选择版本号的方法是挑选除readview表的版本号外的最新版本号。但需要注意的是,RC级别下readview表会随着其他未提交事务的提交而发生变动,但RR不会。当隔离级...
MySQL-acid-mvcc以及=事物隔离级别
09-16
MySQL中有四种事务隔离级别Read UncommittedRead Committed、Repeatable Read 和 Serializable。其中Repeatable ReadMySQL的默认事务隔离级别。 最后, Durability保证事务提交后数据会持久的保存下来。 ...
MySQL数据库事务隔离级别详解
12-16
不过,MySQL的InnoDB存储引擎在“Repeatable Read”级别下通过MVCC(多版本并发控制)和间隙锁策略,可以避免幻读。而在MyISAM引擎下,幻读则可能出现。 4. 串行化(Serializable): 这是最高的隔离级别,完全避免...
mysql多版本并发控制MVCC的实现
09-09
本文将详细介绍MySQL MVCC的实现机制、事务隔离级别的设置、事务的提交方式、不同隔离级别下的行为和并发问题以及相关的操作命令。 ### MVCC实现机制 MVCC主要是通过为每行记录后添加两个隐藏列来实现的,即行的...
聊聊MySQL事务的特性和隔离级别
12-14
- 可重复读(Repeatable Read):MySQL的默认隔离级别,通过多版本并发控制(MVCC)技术防止不可重复读,但可能产生幻读。 - 可串行化(Serializable):最严格的隔离级别,通过锁定事务,防止脏读、不可重复读和...
MVCC下的RRRC级别的区别和实现
热门推荐
qq_35634181的博客
01-27 1万+
最近在学习MVCC,在学习过程中,很疑惑RC(读已提交)和RR(可重复度)级别都用到了MVCC来进行不加锁的读,但是为什么RR级别可以解决幻读,对于RC级别不行? MVCC即多版本并发控制,能够保证多个读请求之间不会进行阻塞,根据事物隔离级别和事物id来确定当前事物能够查询到的数据的版本。对于每行记录来说,可能会存在多个版本,而这些版本会使用使用链表进行关联起来,从而控制一个事务能够查询到的数据的版本。 首先需要明白事务的隔离级别MVCC有密切的关系,你能深入事务的隔离级...
MySQL~MVCC多版本并发控制机制实现原理(read view、undo log、实现RCRR)
最新发布
2401_84048521的博客
04-04 972
当前读和快照读MVCC如何帮助锁实现RCRRMVCCMVCC是一种多版本并发控制机制。大家都应该知道,使用锁和锁协议来实现相应的隔离级别来进行并发控制,味道虽好但因为锁会造成事务阻塞,导致并发性能会受到一定的影响。而多版本并发控制使得对同一行记录做读写的事务之间不用相互阻塞等待(写写还是要阻塞等待,因为事务对数据进行更新时会加上排他锁),提高了事务的并发能力,可以认为MVCC是一种 解决读写阻塞等待的行级锁 。也就是说在InnoDB中MVCC技术是和行锁机制一起使用的所谓多版本就是数据库表中每一行数据都可
InnoDB---可重复读隔离级别的底层实现原理
chuixue24的博客
01-18 1240
可重复读的实现     Repeatable Read(可重复读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录(读已经提交的,其实是读早于本事务开始且已经提交的),但是不能看到其他事务对已有记录的更新(即晚于本事务开始的),并且,该事务不要求与其他事务是“可串行化”的。     这句话的核心,是“但是不能看到其他事务对已有记录的更新”,那么RR隔离级别是怎么保证这一点的呢? ...
事务隔离级别——REPEATABLE-READ(重复读)
Zzze0101的博客
06-08 7799
首先,我们先设置MySQL事务隔离级别为REPEATABLE-READ 在my.ini配置文件最后加上如下配置 #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. [mysqld] transaction-isolation = REPEATABLE-READ 重启MySQL服务 1、脏读 提出问...
事务隔离级别——Read uncommitted
我是真的囟的博客
06-10 3251
根据实际需求,通过设置数据库的事务隔离级别可以解决多个事务并发情况下出现的脏读、不可重复读和幻读问题,数据库事务隔离级别由低到高依次为Read uncommittedRead committed、Repeatable read和Serializable等四种。我们这篇博客主要来分析Read uncommitted 这种事务隔离级别。 一、修改MySQL数据库事务隔离级别。 在my.i...
数据库的几种隔离级别:
qq_38837032的博客
07-29 898
1.数据库的几种隔离级别: READ UNCOMMITTED(读未提交数据): 允许事务读取未被其他事务提交的变更数据,会出现脏读、不可重复读和幻读问题。 READ COMMITTED(读已提交数据): 只允许事务读取已经被其他事务提交的变更数据,可避免脏读,仍会出现不可重复读和幻读问题。 REPEATABLE READ(可重复读): 确保事务可以多次从一个字段中读取相同的值,在此事务持续期间,禁止其他事务对此字段的更新,可以避免脏读和不可重复读,仍会出现幻读问题。 SERIALIZABLE(序列化): 确
MySQLRead Committed隔离级别是如何基于ReadView机制实现
OceanStar的博客
12-23 756
Read Committed隔离级别 && ReadView机制 Read Committed隔离级别,也叫做RC隔离级别。意思是说事务运行期间,只要别的事务修改数据还提交了,就可以读到人家修改的数据的。所以会发生不可重复读以及幻读的问题。 而所谓的ReadView机制,它是基于undo log版本链条实现的一套读视图机制。意思是: 你事务生成一个ReadView,然后如果是你事务更新的数据,自己是可以读到的;或者是在你生成ReadView之前提交的事务修改的值,也是可以读到的。 但是如
数据库中事务的几种隔离级别分别解决了哪些问题
huotongwangbs的专栏
10-12 797
参考:数据库中事务的几种隔离级别分别解决了哪些问题-低调大师优秀的个人博客数据库中事务的几种隔离级别分别解决了哪些问题-2019马上就过去了,刚刚经历了双十一和双十二两大波活动。互联网看似已经平静下来了,其实不然,现在各大平台其实都在加紧分析我们的购买数据。想知道怎么分析数据吗?关注低调大师个人博客,这里有大量的资料分享。并且每天更新最新资讯。https://www.xujun.org/note-124761.html 一段废(huì)话(fà) 前面一直在写 JVM 系列的文章,直到有一天,卡壳了..
数据库事务四大特性、四大隔离级别以及解决的三种问题
guohg1234的博客
07-07 1289
一、数据库事务的四大特性:(ACID) 原子性( Atomicity ):指的是事务是一个不可分割的工作单位,要不全部成功,要不全部回滚 一致性( Consistensy ):事务在执行前后数据库处于一致性。(如:AB之间转账,A少100,B必须要增加100) 隔离性( Isolation ):多个用户并发访问数据库时,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数据要相互隔离 持久性( Durability ):指一个事务一旦被提交,他对数据库的影响是永久性的。 二、数据库事务隔
MySQL事务隔离级别MVCC机制解析
3. **REPEATABLE READ(可重复读)**:这是MySQL的默认隔离级别,能防止脏读和不可重复读,但在某些情况下仍可能出现幻读,不过MySQL通过MVCC机制进行了优化。 4. **SERIALIZABLE(串行化)**:最严格的隔离级别,...
写文章

热门文章

  • Java中小数默认为double类型 5719
  • Java中的strip(), split() 分割字符串 5554
  • java中List<Integer>转化为int[]的方法 5369
  • MySQL数据库索引组合索引的最左优先原则 2415
  • MySQL的MVCC机制实现READ COMMITTED和 REPEATABLE READ隔离级别 1977

分类专栏

  • 日常问题记录 5篇
  • 数据库 14篇
  • JUC 9篇
  • 算法 2篇
  • JVM 5篇
  • java笔记 6篇
  • Linux 2篇
  • 学习路线

最新评论

  • java中List<Integer>转化为int[]的方法

    Demon_bh: 对,漏了 i++

  • MySQL的MVCC机制实现READ COMMITTED和 REPEATABLE READ隔离级别

    Bieber_L: 你说可重复读,保证不会产生幻读,这句话就错了。不要误人子弟

  • java中List<Integer>转化为int[]的方法

    Moon's words: 应该是一个for循环hh

  • MySQL的MVCC机制实现READ COMMITTED和 REPEATABLE READ隔离级别

    kongieg: 老哥从看的啥的教程,能推荐下吗,最近在看这块

  • java中List<Integer>转化为int[]的方法

    三只猪蹄: 遍历有问题呀

大家在看

  • 酒吧收银系统解决方案——未来之窗行业应用跨平台架构 528
  • 揭秘CSS浮动盒:掌握高度塌陷修复、文字环绕特效示艺的秘籍!!(重点秘籍!!) 939
  • 精通CSS布局:探索经典的网页布局样式和技术 160

最新文章

  • JUC(8):AQS重点总结
  • JUC(7): ThreadLocal重点总结
  • JUC(6): Future异步任务重点总结
2022年27篇
2021年14篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家濮阳景观玻璃钢人物雕塑厂家广东动物玻璃钢雕塑市场安庆玻璃钢雕塑价格经开区玻璃钢雕塑天津玻璃钢动物雕塑哪家有湖南喷泉雕塑玻璃钢应城玻璃钢花盆花器玻璃钢爱情人物雕塑无锡元旦商场美陈关公玻璃钢雕塑设计制作广东走廊商场美陈报价宜宾玻璃钢雕塑厂家武威玻璃钢卡通雕塑黑龙江户外玻璃钢雕塑销售厂家玉溪玻璃钢仿铜雕塑汕头玻璃钢雕塑广场摆件金华玻璃钢仿铜雕塑定制福建玻璃钢仿铜雕塑新乡天桥玻璃钢花盆价格岳阳玻璃钢雕塑凳子螃蟹玻璃钢雕塑玻璃钢文字音符雕塑供应商鹤壁玻璃钢卡通动物雕塑生产厂家辽宁玻璃钢仿真雕塑福建秋季商场美陈怎么样东莞商场美陈公司山东装饰商场美陈广州玻璃钢雕塑批发厂家玻璃钢雕塑失误云南玻璃钢雕塑设计如何香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化