少年,你可听说过MVCC?

这篇具有很好参考价值的文章主要介绍了少年,你可听说过MVCC?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

少年,你可听说过MVCC?:切!这谁没听过,不就是多版本并发控制么~

早在亘古时期,修真界就流传着一门mysql功法,将其修至小乘境界,足以纵横一方。。。不乏也有走火入魔者,为祸一方~

少年,你可听说过MVCC?

Serializable篇

强制事务排序,串行化执行事务。技能之间不存在冲突,就是滚键盘~能不能再快点呢,技能前摇那么长,一次性放俩多好^_^

少年,你可听说过MVCC?

Read Uncommitted篇

某个不知名大牛路过你这样搞一下试试:

事务1 事务2
select * from table where key = 1;
update table set name="da niu" where key = 1;
select * from table where key = 1;

看到了没,事务1第一次查询的结果和第二次查询的结果还能一样吗,this is 脏读!

Read Committed篇

原来这就是脏读啊,那我等到事务2提交之后再读,不就ok了吗^_^

事务1 事务2
select * from table where key = 1;
update table set name="da niu" where key = 1;
commit
select * from table where key = 1;

你能说事务1第二次读出来的数据是脏的吗?不能。但是事务一两次读取的数据结果仍然不同,这叫做不可重复读问题。

Repeatable Read篇

这还怎么搞。。。

据说是有个头秃哥,搞了叫Read View个东西出来。Read View可以认为是数据库的一个内部快照,根据事务的隔离级别,决定在事务开始时,该事务能看到什么信息。就是说通过Read View,事务可以知道此时此刻能看到哪个版本的数据记录(有可能不是最新版本的,也有可能是最新版本的)。可重复读、读已提交、读未提交,这几个隔离级别都会使用Read View。

ReadView中主要包含几个比较重要的字段:

creator_trx_id 创建Read View事务的id
trx_ids 生成Read View时活跃的事务id集合
up_limit_id trx_ids中最小的事务id
low_limit_id 生成Read View时下一个可分配的事务id

有了这些id信息,即使事务2已提交的情况下,也不会出现可重复读的问题了:

事务1 事务2
select * from table where key = 1;(获取Read View)
update table set name="da niu" where key = 1;
commit
select * from table where key = 1;(获取Read View)

第一次查找获取Read View,当前事务id为0,该行数据的trx_id小于事务1Read View中的up_limit_id,即该行数据为事务1创建之前产生的,故而对事务1可见;

第二次查找,该行数据的trx_id被事务2改为了自己的事务id,使得trx_id在事务1Read View的trx_ids中,说明改行数据由创建事务1时的其它活跃事务更新过,故而使其对事务1不可见;

少年,你可听说过MVCC?:数据就没。。没了?

当然不会,还记得undo log吗,记录了数据库操作的执行逻辑。我们对这行数据再做一次相反的执行逻辑,就能拿到修改前的数据了^_^

类似的,如果在事务1创建之后,又有事务3被创建,并修改了key=1的数据,则该行记录的trx_id大于等于事务1Read View中的low_limit_id,也可以知晓当前数据被修改过来。继续根据undo log恢复以前版本的数据即可。

这就是多版本并发控制了。。。

幻读篇

那幻读又是啥呢??

前面说了不可重复读的问题,是说同一个事务中,多次查询同一条记录,查询结果不同的问题;

幻读其实也很简单,说的是同一个事务中,查询多次,查询结果记录条数不一致的问题;

明白了吧,一个是说记录本身的内容发生变化,另一个说的是记录的条数。

显然,通过MVCC,也能解决幻读的问题了

少年,你可听说过MVCC?文章来源地址https://www.toymoban.com/news/detail-468137.html

到了这里,关于少年,你可听说过MVCC?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • x86 32 64 Arm这些听过但不懂,都是什么?是架构还是系统?一文梳理

    x86 听过吗? 64位操作系统知道吧 和x86什么关系 32和64都是什么东西? 曾经的我也一头雾水,今天我才来整理一下,惭愧惭愧! 今天带着沉重的心情来梳理一下学习内容吧 如果你很熟悉很了解计算机的话,应该知道,处理器、操作系统、驱动、软件都有32位和64位之分,只不

    2024年04月29日
    浏览(59)
  • 都听说过 lodash,但你会用吗?

    Lodash 是 JavaScript 社区最出名的一个工具库,提供了许多高效、高兼容性的工具函数。 不过,随着浏览器和 web 技术的发展,一些人开始反对在项目中使用 lodash。主要原因有: ES6 之后拓展了 JavaScript 特性,许多功能不再需要额外工具库。 现代浏览器对 ES 语法的支持性提升。

    2024年02月16日
    浏览(46)
  • 利用ChatGPT场景化学习英语听说读写

    大家好,我是可夫小子,关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加我,备注:chatgpt,拉你进群。 我们从初中就开始学习英语,到大学也有小十年,在这个过程中,我们投入了很多时间和精力,但大多数就是为了一个微薄的分数,成绩不理想,收效甚微。毕业

    2024年02月16日
    浏览(46)
  • 知乎高赞:听说Rust要取代C++?

      随着近几年Rust的大火,越来越多的人开始质疑,Rust势头这么猛,是不是要取代C++?小慕认为,一门编程语言想要完全取代另一门编程语言是很难的,毕竟每一门技术都有它的专属优势和特点,总会在特别的地方发光发热。不过随着Rust的势头越来越强,希望Rust取代C++呼声也

    2024年02月03日
    浏览(45)
  • 云卷云舒:PostgreSQL的事儿你听说了吗?

    最近,PostgreSQL公布了全球贡献者名单。 以上是全球贡献者主要成员,可以看出都是外国人,除了一名台湾省贡献者外,几乎再看不到中国贡献者的身影。 那么偌大的中国,为什么在PostgreSQL的全球贡献者名单里面就看不到人呢? 大概的可能就是很多人不贡献回开源社区,基

    2024年01月25日
    浏览(28)
  • 听说,ChatGPT 要跟打工人们抢饭碗,是真的吗?

    最近,ChatGPT真的是彻底火出圈了! 这个由 OpenAI 开发的大型语言模型,推出仅仅5天,注册用户就高达100万;推出仅两个月,月活已破亿大关。 其增长速度让曾创下无数增长奇迹的TikTok都望尘莫及,不得不令人惊叹,ChatGPT的确可以堪称是互联网领域发展20年来增长最快的消费

    2024年02月03日
    浏览(45)
  • Stable Diffusion 从听说到超神日记(从安装开始)

      看到下面界面就成功了! 下载好模型打开主页!点击右下角一键启动!  首先弹出下面命令界面。 自动弹出一个网页界面(地址是http://127.0.0.1:7860/?__theme=light),这就是你主要的绘图界面,前面两个窗口不要关。主要是这个黑色的! 这个地方比较坑就是全是英文,每个模

    2024年02月09日
    浏览(33)
  • 听说 Spring Bean 的创建还有一条捷径?

    在 Spring Bean 的创建方法中,有如下一段代码: AbstractAutowireCapableBeanFactory#createBean: 我们平时说的 Bean 的创建逻辑都是指 doCreateBean 方法中的逻辑,在松哥前面几篇文章中,凡是涉及到 Bean 的创建流程的,我说的也都是 doCreateBean 方法的流程。 但是小伙伴们注意,在 doCreateB

    2024年02月15日
    浏览(32)
  • 【从零开始】Docker Desktop:听说你小子要玩我

    捡起遗忘的Docker知识 由于本狗近期 项目紧任务重 ,高强度的搬砖导致 摸鱼时间下降 。在上线项目时,看到 运维大神 一系列骚操作, docker+k8s的知识 如过眼云烟,忘得干净的很。所以想重新恶补一下 docker知识 ,但又碍于 服务器资源有限 ,只能从 本狗win10电脑进行安装D

    2023年04月14日
    浏览(33)
  • 「建模学习」听说3D建模很难,原来不是学不会,而是缺少这个

    朋友问目前什么行业最赚钱? 说当然是游戏行业啦,这是毋庸置疑的! 随着现在游戏行业的迅速发展 许多小伙伴都想进入游戏行业(当然不是去打游戏消费啦) 但美术基础比较差的小伙伴 应该从哪开始呢? 嘿嘿,其实除了游戏开发之外呀,还有一个岗位非常适合现在有理

    2023年04月08日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包