java培训机构_南阳清大教育培训机构

java培训机构_南阳清大教育培训机构正文谈到MYSQL的事物,相信大家对这几个概念都不会陌生:四大特性:ACID并发问题脏读不可重复读幻读隔离级别ReadUncommitted(读未提交)ReadCommitted(读提交)RepeatableRead(可重读)Serializable(可串行化)下面的思维导图可能更表达得清晰????MySQL的默认事物隔离级别是RR(RepeatableRead),可重复读级别是能够解决脏读、不可重复读的这两个事物并发问题的,但是幻读的问题仍

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

正文

谈到 MYSQL 的事物, 相信大家对这几个概念都不会陌生:

  • 四大特性:ACID
  • 并发问题
    • 脏读
    • 不可重复读
    • 幻读
  • 隔离级别
    • Read Uncommitted(读未提交)
    • Read Committed(读提交)
    • Repeatable Read(可重读)
    • Serializable(可串行化)

下面的思维导图可能更表达得清晰?

java培训机构_南阳清大教育培训机构

MySQL 的默认事物隔离级别是 RR (Repeatable Read) ,可重复读级别是能够解决脏读、不可重复读的这两个事物并发问题的,但是幻读的问题仍会存在,如果使用Serializable的隔离级别,对于高并发的业务来说是不实际的。那么 MySQL 是如何解决幻读这个棘手的问题呢?

没错,MySQL 通过MVCC(多版本并发控制)和Gap Lock(间隙锁)这两个机制解决了幻读的问题~

那么这两种方式具体又是如何实现的呢?

这里我们先讲一下 MySQL 的**”读”的区别**。因为在事物隔离级别中的**“读”**,分为快照读(snapshot read)当前读(current read)

1. 当前读(current read)

select…lock in share mode (共享读锁) select…for update update , delete , insert

读取的是最新的数据,并且对读取的记录加锁,阻塞其他事物对当前事物查询数据的修改和插入,从而解决幻读。

实现方式:Next-key Locks(临键锁)

官方对临键锁的定义是:

A next-key lock is a combination of a record lock on the index record and a gap lock on the gap before the index record.

简单来说就是 临键锁 = 行记录锁 + 间隙锁

行锁、间隙锁这个锁的概念,下文会介绍。所以这里我们只要知道的是,对于事物的当前读模式,是通过 Gap-Key-Locks 解决的。

2. 快照读(snapshot read)

select * from table

单纯的 select 操作

Read Committed 隔离级别:每次select都生成一个快照读。

Read Repeatable 隔离级别:开启事务后第一个select语句才是快照读的地方,而不是一开启事务就快照读。

实现方式:undolog 和 MVCC

undolog 用于数据的撤回操作,它记录了修改的反向操作,比如,插入对应删除,修改对应修改为原来的数据,通过undo log 可以实现事务回滚,并且可以根据 undo log 回溯到某个特定的版本的数据。

MVCC 就是上文提到的多版本并发控制。

实现方式

MVCC

MVCC 只是工作在两种事务级别底下:

  • Read Committed
  • Repeatable Read

MVCC 每行记录后面保存三个隐藏的列,其中其主要作用的有两列

DB_TRX_ID: 记录行数据创建时的事物版本号。每开启一个事物,事物版本号都会递增。

DB_ROLL_PTR: 记录行数据何时过期(或者被删除)。指向前一个版本的 undolog 记录,组成 undo 链表。如果更新了行,则撤消日志记录包含在更新行之前重建行内容所需的信息。

  • INSERT

    插入数据时, DB_TRX_ID 记录的是当前新增数据的事物版本号

  • DELETE

    删除数据时,DB_ROLL_PTR 记录的是当前操作删除的事物版本号

  • UPDATE

    1. 更新数据时,插入一条新的数据,DB_TRX_ID 记录的是当前更新数据的事物版本号

    2. 将旧数据的 DB_ROLL_PTR 值更新为当前更新数据的事物版本号

  • SELECT

    查询规则如下:

    1. 查找数据行版本号早于当前事务版本号的数据行记录,也就是说(当前的查询的事物版本号 >= DB_TRX_ID 中的值)

      这样就能确保事物读取的数据,要么是当前事物已经存在的,要么是当前事物所操作过的。

    2. 查找删除版本号要么为NULL,要么大于当前事务版本号的记录。也就是说 (DB_ROLL_PTR IS NULL OR DB_ROLL_PTR > 当前的查询的事物版本号)

      这样确保查询出来的数据行记录在事务开启之前没有被删除。

java培训机构_南阳清大教育培训机构

最近我根据上述的技术体系图搜集了几十套腾讯、头条、阿里、美团等公司21年的面试题,把技术点整理成了视频(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,这里以图片的形式给大家展示一部分

戳这里免费领取下面所有资料

java培训机构_南阳清大教育培训机构

戳这里免费领取下面所有资料

[外链图片转存中…(img-qk0fO867-1624509560018)]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188994.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PHP中的GetType和SetType

    PHP中的GetType和SetType

    2021年10月15日
    39
  • AspNetPager组件

    AspNetPager组件UrlPaging=”false”NumericButtonTextFormatString=”[{0}]”CustomInfoHTML=”第%CurrentPageIndex%页共%PageCount%页显示%StartRecordIndex%-%EndRecordIndex%条”                                   ShowCusto

    2025年7月31日
    6
  • windows10修改host文件_手机修改hosts文件

    windows10修改host文件_手机修改hosts文件Windows修改host文件在实际的开发中,有时我们会修改windows的hosts文件,达到指定域名映射到指定ip上的功能。修改方式如下:1.windows中hosts文件位置(win10):C:\Windows\System32\drivers\etc\hosts2.修改方式#将www.aaa.com域名映射到127.0.0.1IP地址上127.0.0.1www.aaa.com3.应用在不用重启系统情况下,应用修改后的hosts文件,打开

    2022年10月12日
    3
  • 华为ensp模拟器安装教程_华为模拟器路由器无法启动

    华为ensp模拟器安装教程_华为模拟器路由器无法启动eNSP是个很好用的学习工具,但是其安装过程并不那么简单,很多同学在模拟器的安装过程遇到了诸多问题。安装的软件如下:1、V-BOX版本5.16,经实际测试完美兼容最新版eNSP在win-7和win-10的运转;2、Wireshark抓包软件,汉化版,在win-7,win-10与ENSP工作正常;3、eNSP最新版1.300.10,实际检验在win-7,win-10工作正常,自带镜像工作正…

    2022年10月9日
    5
  • 免备案空间收集

    免备案空间收集用了这个国外的免备空间,觉得其他的都弱爆了此空间无广告,大空间,速度快,而且是即时开通的,我去截图分享下。虽然是美国的,但是提供中文申请页面,但是用谷歌浏览器可以无障碍设置。这是登录进去时候的页面:这个是我目前的两个域名,每过24小时可以创建一个。这个是控制面板这个是我的账户信息可以看一下磁盘容量和带宽,都是大到用不完···,跟其他的需要付神马1块两块钱别人才提供给…

    2022年6月18日
    25
  • 免费空间(免备案,无广告) 1G免费全能空间

    免费空间(免备案,无广告) 1G免费全能空间云邦互联免费空间(免备案,无广告)【1G免费全能空间,免备案,无广告】 1G全能空间+100M数据库(Mysql5.5/SQLServer2005) 支持的脚本:ASP、PHP(5.2-7.0)、.NET(2.0/4.0) 没有任何限制,详细功能请访问: https://www.yunzz.net/host/free.html(云邦互联) 推广

    2022年6月28日
    45

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号