当前位置: 首页 > news >正文

innoDB如何解决幻读

Mysql的事务隔离级别

Mysql 有四种事务隔离级别,这四种隔离级别代表当存在多个事务并发冲突时,可能出现的脏读、不可重复读、幻读的问题。其中 InnoDB 在 RR 的隔离级别下,解决了幻读的问题
事务隔离级别脏读不可重复读幻读
未提交读(Read Uncommitted)可能可能可能
已提交读(Read Committed)不可能可能可能
可重复读(Repeatable Read)不可能不可能对InnoDB不可能
串行化(Serializable)不可能不可能不可能

幻读

幻读是指在同一个事务中,前后两次查询相同的范围时,得到的结果不一致。
  • 第一个事务里面我们执行了一个范围查询,这个时候满足条件的数据只有一条
  • 第二个事务里面,它插入了一行数据,并且提交了
  • 接着第一个事务再去查询的时候,得到的结果比第一查询的结果多出来了一条数据。

所以,幻读会带来数据一致性问题。

InnoDB如何解决幻读的问题 

InnoDB 引入了间隙锁和 next-key Lock 机制来解决幻读问题,为了更清晰的说明这两种锁,我举一个例子:
假设现在存在这样,这样一个 B+ Tree 的索引结构,这个结构中有四个索引元素分别是:1、4、7、10。

当我们通过主键索引查询一条记录,并且对这条记录通过 for update 加锁 

这个时候,会产生一个记录锁,也就是行锁,锁定 id=1 这个索引。

被锁定的记录在锁释放之前,其他事务无法对这条记录做任何操作。
前面我说过对幻读的定义: 幻读是指在同一个事务中,前后两次查询相同的范围时,
得到的结果不一致! 注意,这里强调的是范围查询, 也就是说,InnoDB 引擎要解决幻读问题,必须要保证一个点,就是如果一个事务通过这样一条语句进行锁定时。

另外一个事务再执行这样一条(显示图片)insert 语句,需要被阻塞,直到前面获得锁的事务释放。

所以,在 InnoDB 中设计了一种间隙锁,它的主要功能是锁定一段范围内的索引记录当对查询范围 id>4 and id <7 加锁的时候,会针对 B+树中(4,7)这个开区间范围的索引加间隙锁。意味着在这种情况下,其他事务对这个区间的数据进行插入、更新、删除都会被锁住。

但是,还有另外一种情况,比如像这样

 

这条查询语句是针对 id>4 这个条件加锁,那么它需要锁定多个索引区间,所以在这种情况下 InnoDB 引入了 next-key Lock 机制。next-key Lock 相当于间隙锁和记录锁的合集,记录锁锁定存在的记录行,间隙锁锁住记录行之间的间隙,而 next-key Lock 锁住的是两者之和。
每个数据行上的非唯一索引列上都会存在一把 next-key lock ,当某个事务持有该数据行的 next-key lock 时,会锁住一段 左开右闭区间 的数据。因此,当通过 id>4 这样一种范围查询加锁时,会加 next-key Lock,锁定的区间范围是:(4, 7] , (7,10],(10,+∞]

 

间隙锁和 next-key Lock 的区别在于加锁的范围,间隙锁只锁定两个索引之间的引用间隙,而 next-key Lock 会锁定多个索引区间,它包含记录锁和间隙锁。当我们使用了范围查询,不仅仅命中了 Record 记录,还包含了 Gap 间隙,在这种情况下我们使用的就是临键锁,它是 MySQL 里面默认的行锁算法。

总结

虽然 InnoDB 中通过间隙锁的方式解决了幻读问题,但是加锁之后一定会影响到并发性能,因此,如果对性能要求较高的业务场景中,可以把隔离级别设置成 RC,这个级别中不存在间隙锁。

相关文章:

innoDB如何解决幻读

Mysql的事务隔离级别 Mysql 有四种事务隔离级别&#xff0c;这四种隔离级别代表当存在多个事务并发冲突时&#xff0c;可能出现的脏读、不可重复读、幻读的问题。其中 InnoDB 在 RR 的隔离级别下&#xff0c;解决了幻读的问题 事务隔离级别脏读不可重复读幻读未提交读&#xff…...

Git - 导出(archive)、忽略(gitignore)、隐藏(Stash)、合并冲突(merge)的解决方法

概述 本次集中总结了Git4个常规操作&#xff0c;导出(archive)、忽略(gitignore)、隐藏(Stash)、合并冲突(merge)的解决方法&#xff0c;希望帮助到正在辛苦寻找的你。 .gitignore忽略文件 之前开发和部署服务比较仓促&#xff0c;所以有很多图片文件一起加载到服务中&#…...

【Javascript】‘var‘ is used instead of ‘let‘ or ‘const‘

解决&#xff1a; 设置完之后,var 就不会再出现黄色波浪线警告...

金融统计学方法:神经网络

目录 1.神经网络 2.深度神经网络 3.案例分析 1.神经网络 神经网络是模仿人脑神经元工作原理而设计的一种算法模型。在一个基本的神经网络中&#xff0c;存在多个“神经元”或称为“节点”&#xff0c;这些节点被组织成多个层次。每个节点都接收前一层的输入&#xff0c;进行…...

任何人不知道这款超实用的配音软件,我都会伤心的OK?

看完一段精彩的视频&#xff0c;令人陶醉的原因之一就是配音&#xff0c;有的充满感情&#xff0c;有的字正腔圆&#xff0c;相信很多人都不知道这样的声音是怎么配出来的&#xff1f;今天&#xff0c;小编就来给大家分享一款超实用的配音软件&#xff0c;不仅操作简单&#xf…...

Linux查看日志文件的常用命令

1、查看文件最后1000行内容 tail -n 1000 filename 2、实时查看文件最后1000行内容&#xff0c;动态刷新 tailf -n 1000 filename tail -f -n 1000 filename 3、按照关键字搜索日志 cat filename | grep 关键字 4、按照关键字搜索并包含前(后)多少行 【&#xff08;A前B后C前…...

AcWing算法分享系列——二分图

这是AcWing算法分享系列的第一篇文章,我们先从图论的知识下手(因为我觉得图论的只是好理解些)。 这次我们主要讲的就是二分图,二分图这次我们主要讲的就是最基础的两个板块: 二分图的判定(染色法)二分图的完美匹配(匈牙利算法)我们这一篇文章先从二分图的概念开始入手…...

【Excel单元格类型的解析校验】Java使用POI解析excel数据

一、使用的maven依赖&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.7</version> </dependency> <dependency><groupId>org.apache.poi</groupId&…...

【运维知识高级篇】超详细的Jenkins教程5(pipeline流水线配置+分布式构建)

CI/CD是持续集成&#xff0c;持续部署&#xff0c;集成就是开发人员通过自动化编译&#xff0c;发布&#xff0c;测试的手段集成软件&#xff0c;在开发的测试环境上测试发现自己的错误&#xff1b;持续部署是自动化构建&#xff0c;部署&#xff0c;通常也是在测试环境上进行&…...

为什么要在电影院装监控?有什么作用?

近期小编在网上看到有很多人在讨论&#xff1a;电影院的摄像头有多高清&#xff1f;看电影时的小动作放映员都能看得一清二楚&#xff1f;答案是&#xff1a;是的。但大家也不必有心理负担&#xff0c;电影院的监控目的不是为了监控观众&#xff0c;更多的是为了保障观影者的权…...

攻防世界题目练习——Web引导模式(三)(持续更新)

题目目录 1. mfw2. Cat3.4.5. 1. mfw 进去看到网页和页面内容如下&#xff1a; 看到url的参数 ?pageabout &#xff0c;我以为是文件包含什么的&#xff0c;反复试了几次&#xff0c;想用 …/…/…/…/etc/passwd &#xff0c;但是发现.似乎被过滤了&#xff0c;实在不知道怎…...

Python制作PDF转Word工具(Tkinter+pdf2docx)

一、效果样式 二、核心点 1. 使用pdf2docx完成PDF转换Word 安装pdf2docx可能会报错&#xff0c;安装完成引入from pdf2docx import Converter运行也可能报错&#xff0c;可以根据报错提示看缺少那些库&#xff0c;先卸载pip uninstall xxx,使用pip install python-docx -i htt…...

有哪些手段可以优化 CSS, 提高性能

CSS优化是Web开发中提高性能和用户体验的关键部分。下面详细解释一些CSS优化的方法&#xff0c;以提高性能&#xff1a; 合并和压缩CSS文件: 合并文件&#xff1a;将多个CSS文件合并成一个&#xff0c;以减少HTTP请求次数。这可以通过构建工具&#xff08;如Webpack&#xff09…...

ARM可用的可信固件项目简介

安全之安全(security)博客目录导读 目录 一、TrustedFirmware-A (TF-A) 二、MCUboot 三、TrustedFirmware-M (TF-M) 四、TF-RMM 五、OP-TEE 六、Mbed TLS 七、Hafnium 八、Trusted Services 九、Open CI 可信固件为Armv8-A、Armv9-A和Armv8-M提供了安全软件的参考实现…...

信创办公–基于WPS的Word最佳实践系列 (图文环绕方式)

信创办公–基于WPS的Word最佳实践系列 &#xff08;图文环绕方式&#xff09; 目录 应用背景操作步骤1、 打开布局选项中图文环绕方式的方法2、 图文环绕三大类型 应用背景 在Word中&#xff0c;对文字和图片进行排版时&#xff0c;采用各种不同的图片与文字组合效果能够使页面…...

Naive UI数据表格分页pageCount配置没效果

吐槽&#xff1a;因为naive-ui是基于vue3&#xff0c;所以目前的组件资料是少之又少啊&#xff0c;虽然好用&#xff0c;但感觉没有特别的普及。 背景&#xff1a;记得1年前我第一次碰到了这个问题&#xff0c;在列表里使用:pagination分页&#xff0c;怎么都不显示页码&#…...

Kibana Discover数据查询

步骤1&#xff1a;打开管理页面(Management) 步骤2&#xff1a; 因为前面的章节导入航班数据的时候&#xff0c;自动创建了一个名字叫kibana_sample_data_flights的航班数据索引&#xff0c;如果我们只想搜索kibana_sample_data_flights索引的数据&#xff0c;则不需要通配符&…...

笔记 | 编程经验谈:如何正确的使用内存

笔记 | 编程经验谈:如何正确的使用内存 首先我们要了解内存的分配方式。一般来说,内存的分配方式有三种: 1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 2.在栈上创建。在执行函数时,函数内…...

C语言入门-1.1 C语言概述

想要学好一门计算机编程语言&#xff0c;就和谈一个女朋友是一样的&#xff0c;需要对其深入了解。 1、计算机语言 &#xff08;1&#xff09;什么是计算机语言&#xff1f; 顾名思义&#xff0c;就是计算机之间交流的语言&#xff0c;就和人一样&#xff0c;咱们都是使用普通…...

周记之学习总结

你在人群中看到的每一个耀眼的女孩&#xff0c;都是踩着刀尖过来的。你如履平地般地舒适坦然&#xff0c;当然不配拥有任何光芒&#xff1b; 10.11-10.12 思来想去还是不舍得&#xff0c;搞了一下这个jwt&#xff0c;看了很多视频和博客&#xff0c;一直没看懂&#xff0c;两…...

NVIDIA Cosmos Policy:机器人控制策略的模块化与仿真训练实践

1. 项目概述&#xff1a;机器人控制策略的新范式在机器人控制领域&#xff0c;策略算法的稳定性和泛化能力一直是核心挑战。NVIDIA最新推出的Cosmos Policy框架&#xff0c;通过结合物理仿真与强化学习&#xff0c;为复杂场景下的机器人控制提供了标准化解决方案。这套系统最吸…...

在Windows上获得MacBook级别触控体验:开源驱动完全指南

在Windows上获得MacBook级别触控体验&#xff1a;开源驱动完全指南 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-precision-touchpad …...

ChatGPT资源导航与开发实战:从原理到应用的全景指南

1. 项目概述&#xff1a;一份面向开发者的ChatGPT资源全景图如果你是一名开发者、产品经理&#xff0c;或者任何对AI应用抱有浓厚兴趣的技术爱好者&#xff0c;最近几个月肯定被“ChatGPT”这个词刷屏了。从最初的惊艳对话&#xff0c;到后来的API开放&#xff0c;再到各种基于…...

巨人网络年营收50亿:同比增73% 扣非后净利21亿 斥资20亿理财 中东资本成第四大股东

雷递网 雷建平 4月27日巨人网络集团&#xff08;证券代码&#xff1a;002558 证券简称&#xff1a;巨人网络&#xff09;日前发布截至2025年的年报。年报显示&#xff0c;巨人网络2025年营收为50.47亿&#xff0c;较上年同期的29.22亿元增长72.69%。巨人网络2025年净利为17.55亿…...

Murmur:开源全局语音输入工具,解放开发者双手

1. 项目概述&#xff1a;解放双手的全局语音输入工具 作为一名长期与代码和文档打交道的开发者&#xff0c;我一直在寻找一种能让我在思考时双手不离开键盘&#xff0c;又能高效输入文字的方法。传统的语音输入工具要么绑定在特定应用里&#xff0c;要么需要频繁切换窗口&…...

DreamActor-M2:基于时空上下文学习的角色动画生成技术

1. 角色动画技术演进与核心挑战角色动画技术近年来在数字娱乐、虚拟内容创作等领域展现出巨大潜力。这项技术的核心目标是将驱动视频中的运动模式迁移到静态参考图像上&#xff0c;生成既保持原始角色外观特征又呈现自然运动的高保真视频序列。传统方法通常依赖于显式的姿态先验…...

别让你的验证码形同虚设:滑块验证码技术实现与最佳实践

验证码这玩意儿&#xff0c;做过爬虫的兄弟应该都不陌生。早年间随便搞个图片识别就能绕过去&#xff0c;现在可没那么简单了。 今天想聊聊滑块验证码这个东西&#xff0c;不是那种"5分钟入门"的浅尝辄止&#xff0c;而是从技术原理、架构设计到企业级实战落地的完整…...

nli-MiniLM2-L6-H768批量处理优化:利用GPU并行计算加速大规模文本对推理

nli-MiniLM2-L6-H768批量处理优化&#xff1a;利用GPU并行计算加速大规模文本对推理 1. 引言 处理海量文本对&#xff08;如百万级&#xff09;的自然语言推理任务时&#xff0c;传统的单条处理方式效率极低。以nli-MiniLM2-L6-H768模型为例&#xff0c;当面对大规模数据时&a…...

在aarch64 Linux机器上安装kiwix zim格式文件阅读工具的两种方法及问题的解决

zim格式文件是kiwix组织开发的一种百科页面离线阅读格式,下载页面https://download.kiwix.org/ 提供多个平台的阅读工具kiwix-desktop,如windows有直接解压可用的绿色软件包,macos有appimage,但是未提供aarch64 Linux 二进制文件,只提供了flatpak 包。 方法1:使用浏览器…...

NoFences:三分钟搞定Windows桌面混乱的终极分区方案

NoFences&#xff1a;三分钟搞定Windows桌面混乱的终极分区方案 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为满屏的桌面图标头疼吗&#xff1f;每次找文件都要"…...