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

MySQL 间隙锁避免“可重复读”出现“幻读”

在数据库事务处理中,可重复读(Repeatable Read)是一个常用的隔离级别,但其默认行为可能导致幻读现象。然而,在 MySQL 的实现中,通过 **间隙锁(Gap Lock)**机制,能够避免幻读的发生。

为什么“可重复读”可能出现幻读?

1. 幻读的定义

幻读是指在事务中,查询某个范围的数据时,发现另一个事务插入了新的记录,这些记录满足查询条件但在事务开始时并不存在。

例如:

  • 事务 A:执行 SELECT * FROM employees WHERE salary > 5000;,结果返回 5 条记录。
  • 事务 B:插入了一条新记录,其 salary = 6000
  • 事务 A 再次执行相同查询,发现结果变为 6 条记录。

这种新增的数据在事务开始时并不存在,因此称为幻读。

2. 可重复读的不足

在“可重复读”级别:

  • 行锁(Record Lock) 保护的是具体的记录,防止其他事务对已存在记录的修改或删除。
  • 但查询范围内的“间隙”并未锁定,因此允许其他事务在间隙中插入新数据,导致幻读。

MySQL 的间隙锁如何避免幻读?

在 MySQL 的 InnoDB 存储引擎中,“可重复读”通过实现 Next-Key Lock(间隙锁 + 行锁) 机制解决幻读问题。

1. 间隙锁(Gap Lock)

  • 定义:间隙锁是指在索引范围的“间隙”上加锁,防止其他事务在该范围内插入新记录。
  • 例如,查询 SELECT * FROM table WHERE id > 10 AND id < 20;,间隙锁会锁住 (10, 20) 范围,防止其他事务在此范围内插入新数据。

2. Next-Key Lock 机制

  • Next-Key Lock 是行锁与间隙锁的组合。
  • 在“可重复读”级别,MySQL 对范围查询加锁时,会锁定:
    • 已存在的行(行锁)。
    • 范围间隙(间隙锁)。
  • 这种机制避免了其他事务在查询范围内插入新数据,从而杜绝幻读。

3. 示例

假设表 employees 有记录 id=1, 2, 3

  • 事务 ASELECT * FROM employees WHERE id > 1; 锁定范围 (1, ∞)
  • 事务 B:尝试 INSERT INTO employees VALUES (4, ...); 会被阻塞,因为事务 A 的间隙锁覆盖了这个范围。

总结

  1. 可重复读导致幻读
    • 可重复读级别中的行锁仅保护已存在记录,未锁定查询范围的“间隙”,导致可能插入新记录而出现幻读。
  2. MySQL 的解决方案
    • MySQL 的 Next-Key Lock(间隙锁 + 行锁) 机制,在“可重复读”级别下,防止在查询范围内插入新数据,从而避免幻读。
  3. 注意事项
    • 间隙锁仅在 事务隔离级别为可重复读或更高时启用。
    • 在性能与隔离性之间,需要根据实际业务需求权衡是否使用这种机制。

相关文章:

MySQL 间隙锁避免“可重复读”出现“幻读”

在数据库事务处理中&#xff0c;可重复读&#xff08;Repeatable Read&#xff09;是一个常用的隔离级别&#xff0c;但其默认行为可能导致幻读现象。然而&#xff0c;在 MySQL 的实现中&#xff0c;通过 **间隙锁&#xff08;Gap Lock&#xff09;**机制&#xff0c;能够避免幻…...

揭秘区块链隐私黑科技:零知识证明如何改变未来

文章目录 1. 引言&#xff1a;什么是零知识证明&#xff1f;2. 零知识证明的核心概念与三大属性2.1 完备性&#xff08;Completeness&#xff09;2.2 可靠性&#xff08;Soundness&#xff09;2.3 零知识性&#xff08;Zero-Knowledge&#xff09; 3. 零知识证明的工作原理4. 零…...

JavaWeb开发:从入门到精通

近年来&#xff0c;JavaWeb开发已经成为了互联网开发领域的重要技术之一。无论是大型企业还是个人项目&#xff0c;都离不开JavaWeb开发。本文将为您介绍JavaWeb开发的基本概念、常用技术和开发流程&#xff0c;帮助您快速入门并掌握这一技术。 一、JavaWeb开发的基本概念 Jav…...

2025年01月07日Github流行趋势

项目名称&#xff1a;khoj 项目地址url&#xff1a;https://github.com/khoj-ai/khoj项目语言&#xff1a;Python历史star数&#xff1a;20105今日star数&#xff1a;363项目维护者&#xff1a;debanjum, sabaimran, MythicalCow, aam-at, shantanuSakpal项目简介&#xff1a;你…...

c#集成npoi根据excel模板导出excel

NuGet中安装npoi 创建excel模板&#xff0c;替换其中的内容生成新的excel文件。 例子中主要写了这四种情况&#xff1a; 1、替换单个单元格内容&#xff1b; 2、替换横向多个单元格&#xff1b; 3、替换表格&#xff1b; 4、单元格中插入图片&#xff1b; using System.IO; …...

Vue2移动端(H5项目)项目封装switch组件支持动态设置开启关闭背景色、值及组件内显示文字描述、禁用、switch 的宽度

前言 近期产品需求&#xff1a;Vue2移动端项目需要在switch开关内显示文字&#xff0c;看Vantui没有对应功能&#xff0c;因此自己手撸写了这个组件。 一、最终效果 二、参数配置 1、代码示例&#xff1a; <t-switch v-model"check"/>2、配置参数&#xff08;…...

MATLAB语言的语法糖

MATLAB语言的语法糖 引言 在编程语言的发展历程中&#xff0c;语法糖&#xff08;Syntactic Sugar&#xff09;被广泛提及。它指的是一种编程语言的语法特性&#xff0c;旨在使代码更易读、更易写&#xff0c;虽然这些特性并不增加语言的表达能力&#xff0c;但能使程序员的生…...

数字IC设计高频面试题

在数字IC设计领域&#xff0c;面试是评估候选人技术能力和问题解决能力的重要环节。数字IC设计的复杂性和要求在不断提高。面试官通常会提出一系列面试题&#xff0c;以考察应聘者在数字设计、验证、时钟管理、功耗优化等方面的专业知识和实践经验。 这些题目不仅涉及理论知识…...

OpenCV 4.5至4.10版本更新概述

OpenCV 4.5至4.10版本更新概述 OpenCV 从 4.5 到 4.10 版本的更迭中&#xff0c;每个版本都引入了新功能、优化和修复。以下是主要版本的更新内容概述&#xff1a; OpenCV 4.5.x 系列 4.5.0 (2020年10月) 新增对 YOLOv4 的支持。引入 DNN 模块的改进&#xff0c;包括对 ONNX …...

OSPF - LSA对照表

LSA的三要素&#xff0c;如何唯一表示一条LSA  Type&#xff1a;表示是几类的LSA  Link-id&#xff1a;这个比较特殊&#xff0c;不同的LSA的Link-ID不同  Advertising router&#xff1a;谁产生的LSA 常用的就是1、2、3、4、5、7型LSA 点击蓝字跳转LSA详细介绍(持续更新中…...

游戏引擎学习第77天

仓库: https://gitee.com/mrxiao_com/2d_game 回顾昨天的 bug 今天我们继续开发进度&#xff0c;进行调试昨天代码的问题&#xff0c;主要是关于如何跟踪玩家和敌人在世界中的高度位置。虽然我们做的是一款 2D 游戏&#xff0c;但我们希望能够处理多层的房间&#xff0c;玩家…...

【项目实战1】五子棋游戏

目录 C语言编程实现五子棋&#xff1a;&#xff1a; game.h game.c 1.打印菜单 2.打印棋盘 3.玩家下棋 4.判断五子连珠 5.判断输赢 6.游戏运行 game.c完整源代码展示 test.c C语言编程实现五子棋&#xff1a;&#xff1a; game.h #pragma once #include<stdio.h> …...

HTML5 动画效果:淡入淡出(Fade In/Out)详解

HTML5 动画效果&#xff1a;淡入淡出&#xff08;Fade In/Out&#xff09;详解 淡入淡出&#xff08;Fade In/Out&#xff09;是一种常见的动画效果&#xff0c;使元素逐渐显现或消失&#xff0c;增强用户体验。以下是淡入淡出的详细介绍及实现示例。 1. 淡入淡出的特点 平滑…...

Conmi的正确答案——Cordova使用“src-cordova/config.xml”编辑“Android平台”的“uses-permission”

Cordova版本&#xff1a;12.0.0 (cordova-lib12.0.1) 1、配置例程&#xff1a; <platform name"android"><config-file target"AndroidManifest.xml" parent"/manifest"><uses-permission android:name"android.permission…...

在Mysql环境下对数据进行增删改查

一、插入数据&#xff1a; insert into 表名 [(字段名)] values (字段对应的值1,字段对应的值2,…)[,(字段对应的值1,字段对应的值2,…)]; insert into students (id,name,age,height,gender,cls_id,is_delete) values (0,小明,18,180.00,2,1,0)在学生表中插入“小明”数据的…...

Spring 设计模式:经典设计模式

Spring 设计模式&#xff1a;经典设计模式 引言 Spring 框架广泛使用了经典设计模式。 这些模式在 Spring 内部发挥着重要作用。 通过理解这些设计模式在 Spring 中的应用&#xff0c;开发者可以更深入地掌握 Spring 框架的设计哲学和实现细节。 经典设计模式 控制反转&am…...

OneFlow和PyTorch在性能上有哪些区别?

OneFlow 和 PyTorch 在性能上的区别主要体现在以下几个方面&#xff1a; 本篇文章的目录 分布式训练性能 硬件利用率和显存优化 模型训练速度 OneFlow&#xff1a;默认采用静态图模式&#xff0c;在模型训练前会对计算图进行编译优化&#xff0c;能够减少运行时的开销&…...

win下搭建elk并集成springboot

一、ELK 是什么&#xff1f; ELK 实际上是三个工具的集合&#xff0c;Elasticsearch Logstash Kibana&#xff0c;这三个工具组合形成了一套实用、易用的监控架构&#xff0c;很多公司利用它来搭建可视化的海量日志分析平台。 ElasticSearch ElasticSearch 是一个基于 Lucen…...

H7-TOOL固件2.27发布,新增加40多款芯片脱机烧录,含多款车轨芯片,发布LUA API手册,CAN助手增加负载率,错误状态信息检测

H7-TOOL详细介绍&#xff08;含操作手册&#xff09;&#xff1a;H7-TOOL开发工具&#xff0c;1拖4/16脱机烧录&#xff0c;高速DAPLINK&#xff0c;RTOS Trace&#xff0c;CAN/串口助手, 示波器, RTT等&#xff0c;支持WiFi&#xff0c;以太网&#xff0c;高速USB和手持 - H7-…...

STM32+WIFI获取网络时间+8位数码管显示+0.96OLED显

资料下载地址&#xff1a;STM32WIFI获取网络时间8位数码管显示0.96OLED 1、项目介绍 主控芯片STM32C8T6 接线&#xff1a;串口1&#xff1a;PA9 PA10 OELD &#xff1a;PB6 PB7 数码管使用&#xff1a;MAX7219 8位数码管 Max7219_pinCLK PAout(5) Max7219_pinC…...

科研进展 | JAG: 大光斑高光谱激光雷达遥感辐射传输模型从垂直视角解锁森林叶绿素分布密码

大光斑高光谱激光雷达辐射传输模型: 垂直视角解锁叶绿素分布密码当森林的 “健康密码” 藏在垂直分层的枝叶间&#xff0c;传统遥感技术难以触及森林冠层中下层的生化奥秘&#xff1f; 近日&#xff0c;电子科技大学定量遥感团队白杰副研究员&#xff08;师资博士后&#xff09…...

OpenClaw连接飞书(机器人)配置及相关参数说明

飞书企业自创应用&#xff08;机器人&#xff09; 飞书开发者后台&#xff1a;https://open.feishu.cn/app?langzh-CN 1、创建企业自建应用&#xff0c;填写应用名称和描述。 2、添加应用能力&#xff1a;机器人 3、权限管理&#xff1a;应用身份权限&#xff0c;开通聊天基础…...

为什么SITS2026要求“AI能力必须嵌入主干流程”?——基于17家头部企业POC数据的因果链分析(含RPA+LLM耦合失效预警模型)

第一章&#xff1a;企业AI原生转型&#xff1a;SITS2026实战攻略 2026奇点智能技术大会(https://ml-summit.org) 企业AI原生转型已从战略构想进入规模化落地阶段。SITS2026&#xff08;Smart Intelligent Transformation Summit 2026&#xff09;提出“三阶跃迁”实践框架&…...

从0到1打造完美PRD:这10个细节让你的需求文档更专业

从0到1打造完美PRD&#xff1a;这10个细节让你的需求文档更专业 在跨部门协作的产品开发中&#xff0c;一份优秀的PRD&#xff08;产品需求文档&#xff09;如同航海图&#xff0c;既能指引团队方向&#xff0c;又能规避潜在风险。但现实中&#xff0c;许多产品经理的文档常陷入…...

2025届学术党必备的六大降重复率工具实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 伴随人工智能生成内容&#xff0c;就是那个AIGC技术的广泛普及&#xff0c;各个大平台以及学…...

用phpstudy在Win11上快速搭建DVWA:一个视频+这篇图文就够了

Win11下DVWA靶场极速搭建指南&#xff1a;phpstudy全流程详解与避坑手册 每次在本地搭建渗透测试环境时&#xff0c;最头疼的就是各种组件的版本冲突和配置问题。直到发现了phpstudy这个神器&#xff0c;配合DVWA靶场&#xff0c;终于能实现一键式部署。本文将带你用最简洁的步…...

别再手动写矩阵了!用Eigen库提升你的C++数值计算效率(性能对比实测)

别再手动写矩阵了&#xff01;用Eigen库提升你的C数值计算效率&#xff08;性能对比实测&#xff09; 在科学计算和工程仿真领域&#xff0c;矩阵运算如同空气般无处不在。从计算机视觉中的三维重建到金融工程里的蒙特卡洛模拟&#xff0c;开发者们每天都在与各种规模的矩阵打交…...

从GNS3到真实网络:手把手教你用Wireshark抓包分析思科路由协议(OSPF/EIGRP实战)

从GNS3到真实网络&#xff1a;手把手教你用Wireshark抓包分析思科路由协议&#xff08;OSPF/EIGRP实战&#xff09; 在网络工程师的成长道路上&#xff0c;理解路由协议的底层工作原理是突破技术瓶颈的关键一步。而GNS3与Wireshark的组合&#xff0c;就像给网络学习者配备了一台…...

__block 变量内存布局详解恫

故障表现 发现请求集群 demo 入口时卡住&#xff0c;并且对应 Pod 没有新的日志输出 rootce-demo-1:~# kubectl get pods -n deepflow-otel-spring-demo -o wide NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NO…...

祝贺电影《日掛中天》荣获2026亚洲艺术电影节两项提名

祝贺电影《日掛中天》荣获2026亚洲艺术电影节两项提名 。 祝贺演员辛芷蕾 提名最佳女主角&#xff1b; 祝贺演员冯绍峰 提名最佳男配角。#亚洲艺术电影节#AAFF2026#电影节#辛芷蕾#冯绍峰#电影日掛中天...