Mysql的事务隔离级别实现原理

news2024/11/14 19:23:09

一、事务隔离级别

mysql支持四种事务隔离级别:

  1. 读未提交:一个事务可以读取到另一个事务还未提交的数据;
  2. 读已提交:一个事务可以读取到另一个事务已经提交的数据;
  3. 可重复读:同一个事务中,无论读取多少次,结果都和第一次读一样;
  4. 串行化:多个事务之间读写和写写按照间隙锁互斥。

二、事务隔离级别实现原理

2.1 读未提交

直接读取最新的数据就好。

2.2 读已提交和可重复读

读已提交和可重复读,都是通过MVCC进行实现的,两者的区别在于ReadView生成方式不同。
MVCC的两个重要概念:版本链ReadView

2.2.1 版本链

在InnoDB引擎中,每行记录都会有两个隐藏列,即trx_idroll_pointer

  1. trx_id:记录最近修改该行的事务id;
  2. roll_pointer:指针,指向该行数据的上一个版本地址。

2.2.2 ReadView

ReadView有四个重要的字段:

  • creator_trx_id:创建该RV的事务id;
  • m_ids:在创建该RV时,当前数据库活跃事务的id列表,即还没提交的事务id列表;
  • min_trx_id:最小的活跃事务id;
  • max_trx_id:最大的活跃事务id+1。
    在这里插入图片描述

2.2.3 ReadView创建区别

读已提交时,一个事务中,每次执行select都会创建一个ReadView
可重复读时,一个事务中,只在第一次执行select时,创建一个ReadView

2.2.4 ReadView的使用规则

在一个事务中,执行select只能看到trx_idmin_trx_idmax_trx_id之间的事务。mysql会按照版本链的顺序从最新的记录开始判断,直到当前事务可以看到的记录为止,或者结束为止。

读已提交和可重复读的底层原理均是MVCC,但是,由于两者创建ReadView的时机不同,故出现了两种隔离表现。

2.3 串行化

使用间隙锁,对读-写和写-写进行互斥。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1966868.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】数组和函数实践:扫雷游戏

扫雷游戏 1. 扫雷游戏分析和设计1.1 扫雷游戏的功能说明1.2 游戏的分析和设计1.2.1 数据结构的分析1.2.2 ⽂件结构设计 2. 扫雷游戏的代码实现(1)菜单menu函数(2)设计main函数(3)设计game函数(4…

免费分享:2013中国沙漠(沙地)分布数据集(附下载方法)

沙漠是指地面完全被沙所覆盖、植物非常稀少、雨水稀少、空气干燥的荒芜地区。沙漠亦作“沙幕”,干旱缺水,植物稀少的地区,通常为风成地貌。中国是世界上沙漠面积较大、分布较广、沙漠化危害严重的国家之一,因此我国十分注重防沙治…

发布Meta Segment Anything Model 2 (SAM 2):开启图像和视频分割的新时代

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

DiffusionModel-latent diffusion,VAE,U-Net,Text-encoder

Diffusers StableDdiffusion Latent Diffusion 稳定扩散(Stable Diffusion)模型中使用的三个关键组件:自编码器(VAE)、U-Net和文本编码器(Text-encoder) 由于潜在扩散模型的U-Net操作在低维空…

掌握FluentResults:.NET中优雅处理结果与错误

在.NET开发中,结果和错误处理是构建健壯应用程序的关键部分。FluentResults是一个.NET库,它提供了一种优雅的方式来处理操作结果和错误。它允许开发者以声明性和链式调用的方式构建结果对象,使得代码更加清晰和易于维护。本文将介绍FluentRes…

云原生大数据平台KDP,实战疑难问题解答

智领云的KDP(Kubernetes Data Platform)是一款自主研发的容器化云原生大数据平台,它是市场上首个能够完全在Kubernetes上部署的大数据平台。KDP深度整合了云原生架构的优势,解决了传统Hadoop大数据平台在架构限制、部署、运维、运…

ctfshow~菜狗杯 flag一分为二

第一步:解压附件得到miku.png文件 第二步:修改图片高度出现一半的flag 第三步:使用盲水印提取工具得到另一半工具 ctfshow{FirstPRTSecondPrTMikumiku~}

认识systemctl

1: 概述 systemctl命令可以帮助systemd管理和维护所有服务,系统启动完成后,systemctl命令会向systemd发送消息进行服务启动和停止等操作,想知道为什么systemctl命令可以向systemd传递消息吗,其实它是通过一个叫D_Bus(desktop bus)桌面总线的东西实现这一点,它可以并行的处理多…

劝你先别更新!!最新Stable Diffusion WebUI 1.10已来!WebUI终于支持SD3大模型了!你跑起来了么?

你的SD3大模型在SD WebUI1.10.0中跑起来了么? 今天发现Stable Diffusion WebUI于昨日推出了最新SD WebUI1.10.0 版本。令人比较兴奋的是该版本支持了SD3大模型,同时也新增了DDIM CFG采样器。主要更新内容如下: 最新版本地址: 更新…

跨境电商TikTok达人合作策略:驱动口碑传播,助力经济增长

通过与TikTok达人的深度合作,跨境电商不仅能够有效提升品牌曝光度和销售额,还能激发用户的口碑传播,形成强大的“口碑经济”效应。本文Nox聚星将和大家分析这种合作模式如何引发口碑经济效应,并探讨如何通过优化合作策略&#xff…

Python酷库之旅-第三方库Pandas(058)

目录 一、用法精讲 221、pandas.Series.interpolate方法 221-1、语法 221-2、参数 221-3、功能 221-4、返回值 221-5、说明 221-6、用法 221-6-1、数据准备 221-6-2、代码示例 221-6-3、结果输出 222、pandas.Series.isna方法 222-1、语法 222-2、参数 222-3、功…

JAVA的String类的contains方法,Indexof方法不使用KMP算法

今天做力扣的一道题目,在一个字符串中找出字符串的时候,想到了JAVA有一个contains方法,于是我去看了一下源码,发现他就是简单地调用了一下java的indexof方法, 然后我又去看了Indexof的源码,发现他就是简单的…

深入探讨C++编译期多态:提高效率与安全性

目录 一、引言 二、编译期多态技术详解 函数重载(Function Overloading) 运算符重载(Operator Overloading) 模板元编程(Template Metaprogramming) 使用std::enable_if实现条件模板特化 使用if con…

让我们逐行重现 GPT-2:第 1 部分

欢迎来到雲闪世界。Andrej Karpathy 是人工智能 (AI) 领域的顶尖研究人员之一。他是 OpenAI 的创始成员之一,曾领导特斯拉的 AI 部门,目前仍处于 AI 社区的前沿。 在第一部分中,我们重点介绍如何实现 GPT-2 的架构。虽然 GPT-2 于 2018 年由 …

Gradle下载的依赖jar包路径位置

Gradle依赖默认下载路径 Mac系统默认下载路径:C:/Users/(用户名)/.gradle/caches/modules-2/files-2.1 Windows系统默认下载路径:C:\Users(用户名).gradle\caches\modules-2\files-2.1 修改Gradle缓存文件夹路径 1. 配置环境变量 添加变量GRADLE_US…

elementUI,vue,前端判断时间是否有交集(重合)方法

分成三个部分 html※ 具体实现方法methods帮助理解逻辑图:![smallredBook:灵魂画手,业余爱好支持支持](https://i-blog.csdnimg.cn/direct/665950ee60964ef8912ce4f1a98dcc0e.jpeg#pic_center) 简化:由上面的逻辑反推[^1] html &…

与OpenAI合作:期待已久的苹果AI战略

探讨 Apple 和 OpenAI 合作的AI战略 ©作者|CodeDan 来源|神州问学 一.引言 在当今科技发展日新月异的背景下,大型科技公司的合作与联盟日益成为关注焦点。在最近的2024苹果全球开发者大会上,苹果展示了最新苹果系统上搭载的大模型应用…

.net 7和core版 SignalR

.net 7和core版 SignalR代码示例(手把手一起认识Websocket、SignalR) # 白话讲解 刚听到Websocket、SignalR有没有很迷茫,一脸懵逼的那种有没有,都是通信,这俩有什么区别,都是怎么实现的,什么时候该用哪一个, 苦于Websocket、SignalR久已,今天必须整出个一二三来,…

UWA Gears使用指南:轻松掌握应用性能优化

UWA最新发布了无SDK性能分析工具 - UWA Gears。该工具能够实时监测应用的CPU和GPU性能,无需代码改动即可掌握性能动态。此外,Gears还能截取应用的渲染画面进行深度分析,帮助您快速找到性能瓶颈并进行精准优化。 本文为您提供快速上手UWA Gea…