mysql的gap锁疑问

MySql进阶-间隙锁(gap-key) 可参考 参考《InnoDB存储引擎》 tips:SELECT…FOR UPDATE对读取的行记录加一个X锁,其他事务不能对已锁定的行加上任何锁。SELECT…LOCK IN SHARE MODE对读取的行记录加一个S锁,其他事务可以向被锁定的行加S锁,但是如果加X锁,则会被阻塞。 使用这两种一致性锁定读的办法注意开启事务,提交事务,来锁定与释放锁。 Innodb锁算法 Record Lock:单个行记录上的锁 Gap Lock:间隙锁,锁定一个范围,但不包含记录本身 Next-Key Lock∶G. 阅读详情

今天,看了一篇博文,我复现原博文的SQL,有一个知识点我理解不了,但是我暂时又不会。先记下来,等过几天有时间在研究研究。

原博文地址:新浪博客MySQL InnoDB锁机制之Gap Lock、Next-Key Lock、Record Lock解析_你若盛开_蝴蝶自来_新浪博客,你若盛开_蝴蝶自来,icon-default.png?t=M7J4http://blog.sina.com.cn/s/blog_a1e9c7910102vnrj.html#commonComment

复现步骤:

在MySQL版本5.7.18,事务隔离级别是REPEATABLE-READ

建表语句:

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test`  (
  `id` int(11) NOT NULL,
  `v1` int(11) NULL DEFAULT NULL,
  `v2` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `idx_v1`(`v1`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of test
-- ----------------------------
INSERT INTO `test` VALUES (1, 1, 0);
INSERT INTO `test` VALUES (2, 3, 1);
INSERT INTO `test` VALUES (3, 4, 2);
INSERT INTO `test` VALUES (5, 5, 3);
INSERT INTO `test` VALUES (7, 7, 4);
INSERT INTO `test` VALUES (10, 9, 5);

SET FOREIGN_KEY_CHECKS = 1;

1,在navicat中,第一个窗口中

start transaction;

update test set v2 = 9 where v1 = 5;

按道理说,我的next-key lock会锁定v1的(4,7),任何其他事务只要不在这个区间操作,就不会发生“锁等待的情况”。

2,在第二个窗口中

start transaction;

update test set v1 =2 where v2 = 5;

这个修改v1又不在(4,7)范围内,什么连边界都没有沾上边,为什么执行不了???

解答思路:

经过思考了,我发现我刚才的思路有问题。我总是想着第二个窗口的v1一定和第一个窗口的v1因为间隙锁而造成了锁等待现象,也是原博文中给的错误指引。

实际结果应该是:在第二个窗口中,v2作为更新条件,导致锁表,但是第一个表锁住了2行了,所以第二个窗口中事务,锁表失败,发生了锁等待现象。

不过无论如何,我从原博中学习了很多,感谢原博主。

聊一聊mysql中的间隙锁 间隙锁在mysql中经常使用到,今天就聊一聊mysql的间隙锁的内容。间隙锁是为了解决幻读的问题,并且在当前读的场景下解决的。当前读包含:update,delete,insert,select…lock in share mode,select…for update。 阅读详情

相关推荐

第一章、isaacsim 及 isaaclab 安装教程

本专栏所有内容将根据上述资源地址展开,请结合食用~

m0_47719040的博客 4775

Record锁/Gap锁/Next-key锁/插入意向锁

前言 InnoDB常见的锁有Record锁、gap锁、next-key锁、插入意向锁、自增锁等。 下面会对每一种锁给出一个查看锁的示例。 常见的锁有Record锁、gap锁、next-key锁、插入意向锁、自增锁等。 下面会对每一种锁给出一个查看锁的示例。 1 准备工作 1.1 测试用表结构 示例的基础是一个只有两列的数据库表。 mysql> CREATE TABLE test ( id int(11) NOT NULL, code int(11) NOT NULL, PRIMARY

没有伞的孩子必须努力奔跑!—小林 1971

vfsglobal预约系统登录问题全解析(by quqi99)

本文全面解析VFS Global预约系统登录常见问题,包括IP限制、验证码验证失败及账号自动删除等。提供详细的解决方案,如DNS配置、浏览器设置及邮箱选择建议,帮助用户顺利完成签证预约。特别针对中国用户遇到的IP限制问题,给出了实用技巧。

gamma的博客 1335

mysql间隙锁(gap锁)初探

关于mysql的4种隔离级别,我们可以参考下面文章,已经介绍的很详细了: https://www.cnblogs.com/huanongying/p/7021555.html https://developer.aliyun.com/article/743691 那么在mysql默认的隔离级别,可重复读(通过SELECT @@tx_isolation查询),探讨一下gap锁的情况: 1、准备测试数据: CREATE TABLE `test_gapLock` ( `id` int(11)

小哥骑单车 3103

qPCRtools | 神仙R包分分钟搞定你的qPCR实验结果!~

1写在前面 不知道大家都是怎么完成qPCR的计算的,在不会R的时候,我是用一个祖传的Excel表进行计算的。🤣 但是,一直有个缺点,如果需要计算的量比较大时,就不方便了,去搜了一下文献,发现了一个最近发表的R包,不仅可以计算反转录的RNA体积,还可以帮助选择定量方法,简直是神仙R包,本期就介绍一下它的使用吧。🥰 感谢原作者的开发,嘿嘿,文末有引用方法。👀 2用到的包 rm(list = ls())library(tidyverse)library(ggsci)library(qPCRtools)librar

m0_72224305的博客 3983

在 SAP HANA XS Advanced 中用 InA 打通 Web 化分析数据访问:架构原理、部署步骤与实战指南

本文介绍了如何在SAP HANA环境中通过InA协议为XS Advanced应用和分析工具提供实时数据访问。主要内容包括:InA协议的作用是将HANA计算视图等模型通过HTTP(S)暴露为实时数据源;SAP HANA Analytics Adapter(xsahaa)是关键组件,负责协议转换和连接管理;部署包含本地和云端两种形式,均需建立XSA空间与租户数据库的映射;实施前需准备HDI容器、适配器构建和网络验证;安全方面通过XSA用户角色和HDI授权双重控制;文章还提供了与SAP Analytics Clo

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 257

update语句造成的死锁

问题场景:

qq_56754651的博客 6748

YOLOv8 置信度阈值 (conf) 和 IoU 阈值 (iou) 详解:如何平衡漏检与误检?

摘要 本文深入探讨了YOLOv8目标检测模型中两个关键参数——置信度阈值(conf)和IoU阈值(iou)的核心作用。文章从目标检测的基础概念出发,解释了置信度分数反映模型预测可靠性,IoU衡量预测框重叠程度。重点剖析了非极大值抑制(NMS)机制如何通过这两个阈值进行预测框筛选:置信度阈值作为初筛门槛,IoU阈值决定重叠框的取舍。通过生动比喻和可视化图表,阐述了合理调节这两个参数能有效平衡误检与漏检问题,是优化YOLOv8模型实际表现的重要技巧。全文以实践为导向,帮助开发者掌握成为"调参大师&qu

深耕 Vue 生态与 JS/TS 技术,聚焦组件封装、响应式原理、TS 类型设计,解析工程化配置与性能优化方案。同时分享 YOLOv8 目标检测实战、AI 大模型面试核心考点,以代码实例拆解技术实现与业务解法。 1236

mysql 表死锁_为什么说 MySQL 的表锁不会产生死锁

1.session1 执行 delete 会在唯一索引 c2 的 c2 = 15 这一记录上加 X lock(也就是在MySQL 内部观测到的:X Lock but not gap);2.session2 和 session3 在执行 insert 的时候,由于唯一约束检测发生唯一冲突,会加 S Next-Key Lock,即对 (1,15] 这个区间加锁包括间隙,并且被 seesion1 ...

weixin_35835030的博客 2577

网表导入virtuoso后发现pg pin忘记connect_pg_net/globalNetConnect怎么办?

数模混合项目中经常需要一些需要到virtuoso去连接的线,比如IO上的pg和一些信号线,除了在pr工作中设置skip route之外还需要做好net的赋值,告诉工具虽然我没在物理上有连接,但是实际上应该连什么net,这部分提现在网表里。在Default Net Name中也填写net name,因为这个net需要做global操作,即在顶层定义这个net,所以需要在net name后加个!打开schematic,删除指定cell pin所接net的label。

m0_61544122的博客 967

【网络与爬虫 61】移动端App爬虫终极指南:Android-iOS应用数据提取黑科技全解析

本文全面解析移动端App爬虫技术,涵盖Android和iOS两大平台的数据提取方法。从基础的网络抓包到高级的代码注入,从自动化测试框架到反调试技术绕过,为开发者提供移动端数据采集的完整解决方案和实战经验。

熵数实验室 3022

on duplicate key update性能问题_MySQL RC级别下并发insert锁超时问题 - 案例验证

作者:网易数据库团队DDB(网易杭研自研的MySQL数据库中间件产品)团队小伙伴发现了一个问题,觉得比较奇怪。于是找到我们,希望解释下。过程中除解释了问题的现象,也通过代码了解了更多的InnoDB DML执行逻辑,还发现了MySQL/InnoDB官方在二级唯一索引冲突检查时加锁行为的反复。本系列打算用三四篇文章来聊聊这个事情。这是第三篇,用实际案例来证明假设。第二篇链接:MySQL RC级别下并发...

weixin_31766871的博客 3269

【毕设实战】飞行器目标识别系统:基于YOLOv5的智能检测全流程教程,助你毕设脱颖而出

亲爱的同学,毕设是不是让你既期待创新又担心技术门槛?如果你的毕设方向是计算机视觉、智能检测,那这个绝对能成为你的“毕设王牌”。从数据准备到界面开发,我会把整个项目拆成“傻瓜式”步骤,让你能一步步做出属于自己的毕设成果。

know_F0727的博客 104

【MySQL】InnoDB中的GAP锁详解

测试数据: CREATE TABLE `lock_test` ( `a` int(11) NOT NULL AUTO_INCREMENT, `b` int(11) NOT NULL, `c` int(11) NOT NULL, `d` int(11) NOT NULL, PRIMARY KEY (`a`), UNIQUE KEY `idx_b` (`b`), KEY `idx_c` (`c`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; IN

morris 6995

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Mysql加锁过程详解(7)-初步理解MySQL的gap锁

初步理解MySQL的gap锁 初识MySQL的gap,觉得这个设计比较独特,和其他数据库的做法不太一样,所以整理一个简单的memo(虽然关于gap锁,相关资料已经很多了) 1. 什么是gap A place in an InnoDB index data structure where new values could be inserted. 说白了gap就是索引树中插入新记录的空隙...

JineD的博客 6530

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

深入了解mysql--gap locks,Next-Key Locks

Next-Key Locks Next-Key Locks是在存储引擎innodb、事务级别在可重复读的情况下使用的数据库锁,官网上有介绍,Next-Key Locks是行锁和gap锁的组合。行锁是什么我们都很清楚,这篇文章主要简单分析一下mysql中的gap锁是什么。innodb默认的锁就是Next-Key locks。 GAP锁 gap锁,又称为间隙锁。存在的主要目的就是为了防止在可重复读的事...

嘎嘎的博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

InnoDB Gap锁

InnoDB Gap锁 这篇文章基于大家对于数据库事务隔离级别以及数据库锁有一定的认识,然后讲一讲InnoDB的Gap锁。 事务隔离级别 数据库的事务隔离级别主要用于定义并发事务之间的相互影响,比如如A事务将一条数据的id由2修改为3但未提交,这时B事务查询该条数据,id是2还是3?事务A提交后呢? 造成这种差异的原因就是事务隔离级别,具体分为以下几种: 未提交读(Read Unc...

沙沙罗曼的专栏 1650

数据库mysql中gap是什么意思_初步理解MySQL的gap锁

初步理解MySQL的gap锁初识MySQL的gap,觉得这个设计比较独特,和其他数据库的做法不太一样,所以整理一个简单的memo(虽然关于gap锁,相关资料已经很多了)1. 什么是gapA place in an InnoDB index data structure where new values could be inserted.说白了gap就是索引树中插入新记录的空隙。相应的gap lo...

weixin_30672649的博客 1661

MYSQL GAP 锁研究

MYSQL 的锁,一直都是一个研究的热点,其中GAP锁的研究一直很 HOT,如果有人问,在同一个查询段,GAP 锁是否可以“兼容”。你怎么回答,这里不做直接回答,我们来做实验先交代清楚这...

sql server的专栏 235

mysql gap锁 死锁_mysql事务死锁案例分析(GAP锁篇)

gap lock(间隙锁),主要用在mysql中解决RR级别事务隔离的幻读问题下面是mysql对gap lock给出的官方解释:A gap lock is a lock on a gap between index records, or a lock on the gap before the first or after the last index record。在官方详细解析中有提到一个要...

weixin_30654137的博客 962

Mysql锁详解(行锁、表锁、意向锁、Gap锁、插入意向锁)

锁:对 “某种范围” 的数据上 “某种锁” 1.“某种范围”:行、表 2.“某种锁” 2.1 共享锁Shared Locks(S锁) 1、兼容性:加了S锁的记录,允许其他事务再加S锁,不允许其他事务再加X锁 2、加锁方式:select…lock in share mode 2.2 排他锁Exclusive Locks(X锁) 1、兼容性:加了X锁的记录,不允许其他事务再加S锁或者X锁 2、加锁方式...

Java程序员的进阶之路 2万+

mysql gap_Mysql加锁过程详解(7)-初步理解MySQL的gap锁

初步理解MySQL的gap锁初识MySQL的gap,觉得这个设计比较独特,和其他数据库的做法不太一样,所以整理一个简单的memo(虽然关于gap锁,相关资料已经很多了)1. 什么是gapA place in an InnoDB index data structure where new values could be inserted.说白了gap就是索引树中插入新记录的空隙。相应的gap lo...

weixin_32299949的博客 613

MySQL之表锁、行锁、事务锁、gap锁、死锁案例详解

表锁、表锁 一、类型 r、x、IX、IS 对于表锁,只有X锁 二、产生条件 r锁:表示对表只读,任何用户都不能对表进行修改。在备份一个一致性表时,会在一瞬间产生表锁。通过lock table tbl_name read;来手动产生 x锁:DDL(drop、alter、truncate)会产生表锁,这个是排他锁,和其他所有的表锁都不兼容。通过lock table tbl_name wri...

weixin_44569143的博客 1849

mysql主键查询gap锁失效_Mysql中的GAP锁(间隙锁)

Mysql中的GAP锁(间隙锁)发布时间:2018-07-12 16:46,浏览次数:649, 标签:MysqlGAPMysql各种场景的加锁过程可以看这篇博文,讲的很细又易懂,下面大部分内容也出自这篇博文http://hedengcheng.com/?p=771#_Toc374698322以前的Mysql在repetable read级别下,还会出现幻读,现在的已经不会了,原因就是因为多了个Ga...

weixin_31175771的博客 554

Mysql加锁过程详解--07初步理解MySQL的gap锁

转载自:http://www.cnblogs.com/crazylqy/p/7689447.html 初步理解MySQL的gap锁 初识MySQL的gap,觉得这个设计比较独特,和其他数据库的做法不太一样,所以整理一个简单的memo(虽然关于gap锁,相关资料已经很多了) 1. 什么是gap A place in an InnoDB index data structure where ...

szzt_lingpeng的专栏 332

mysql gap varchar_【Gap锁】Mysql的Gap锁在中文列下间隙怎样确定?

通过本文记录一次Gaplock的验证,网上大多gaplock是基于明确是数字型列来测试gaplock的,这里不再重复,随便贴个相关地址:https://www.cnblogs.com/crazylqy/p/7821481.html我的疑问是如果所在的列是非数字型的列,比如说是列值是中文的话,mysql是如何确定间隙的,下面开始进行验证。1、查看mysql间隙锁是否开启,默认"OFF"表示开启 =...

weixin_35197188的博客 220
上一篇: Mysql好的教程
下一篇: github学习记录
行走的老熊
博客等级 码龄11年 11粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值