Mysql 死锁案例2-间隙锁与意向插入锁冲突

死锁复现 

CREATE TABLE `t` (`id` int(11) NOT NULL,`c` int(11) DEFAULT NULL,`d` int(11) DEFAULT NULL,PRIMARY KEY (`id`),KEY `c` (`c`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `t` */insert  into `t`(`id`,`c`,`d`) values (0,0,0),(5,5,5),(10,10,10)
事务1事务2
T1START TRANSACTION ;
SELECT * FROM t WHERE id =3 LOCK IN SHARE MODE
T2START TRANSACTION ;
SELECT * FROM t WHERE id =3 LOCK IN SHARE MODE
T3INSERT INTO t VALUES(3, 3,3);(阻塞)
T4INSERT INTO t VALUES(3, 3,3);(死锁)

死锁分析

  1. T1事务1加主键索引间隙锁(0,5)读锁成功
  2. T2事务2加主键索引间隙锁(0,5)读锁成功
  3. T3事务1加主键索引意向插入锁(0,5)阻塞
  4. T4事务2加主键索引意向插入锁(0,5)阻塞,进入循环等待,死锁

 

SHOW ENGINE INNODB STATUS 查看加锁信息

------------------------
LATEST DETECTED DEADLOCK
------------------------
2024-03-10 16:12:57 0x10bc
*** (1) TRANSACTION:
TRANSACTION 486543, ACTIVE 24 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 4 lock struct(s), heap size 1136, 2 row lock(s)
MySQL thread id 4, OS thread handle 7296, query id 2948 localhost ::1 root update
INSERT INTO t VALUES(3, 3,3)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 638 page no 3 n bits 80 index PRIMARY of table `test`.`t` trx id 486543 lock_mode X locks gap before rec insert intention waiting
Record lock, heap no 3 PHYSICAL RECORD: n_fields 5; compact format; info bits 00: len 4; hex 80000005; asc     ;;1: len 6; hex 000000046952; asc     iR;;2: len 7; hex 4b0000019207d7; asc K      ;;3: len 4; hex 80000005; asc     ;;4: len 4; hex 80000005; asc     ;;*** (2) TRANSACTION:
TRANSACTION 486544, ACTIVE 14 sec inserting
mysql tables in use 1, locked 1
4 lock struct(s), heap size 1136, 2 row lock(s)
MySQL thread id 5, OS thread handle 4284, query id 2953 localhost ::1 root update
INSERT INTO t VALUES(3, 3,3)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 638 page no 3 n bits 80 index PRIMARY of table `test`.`t` trx id 486544 lock mode S locks gap before rec
Record lock, heap no 3 PHYSICAL RECORD: n_fields 5; compact format; info bits 00: len 4; hex 80000005; asc     ;;1: len 6; hex 000000046952; asc     iR;;2: len 7; hex 4b0000019207d7; asc K      ;;3: len 4; hex 80000005; asc     ;;4: len 4; hex 80000005; asc     ;;*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 638 page no 3 n bits 80 index PRIMARY of table `test`.`t` trx id 486544 lock_mode X locks gap before rec insert intention waiting
Record lock, heap no 3 PHYSICAL RECORD: n_fields 5; compact format; info bits 00: len 4; hex 80000005; asc     ;;1: len 6; hex 000000046952; asc     iR;;2: len 7; hex 4b0000019207d7; asc K      ;;3: len 4; hex 80000005; asc     ;;4: len 4; hex 80000005; asc     ;;*** WE ROLL BACK TRANSACTION (2)
------------
TRANSACTIONS

 这里注意点,意向插入锁是没有读锁的,它是写锁性质的

上面的案例貌似不怎么贴合实际,因为程序里主动显示的加读锁是不常见的,下面复现一个间隙锁加写锁不冲突,而间隙锁与意向插入锁冲突死锁的例子(两个事务同时更新主键不存在的记录)。 

事务1事务2
T1START TRANSACTION ;
UPDATE t SET d =0 WHERE id =3 
T2START TRANSACTION ;
UPDATE t SET d =0 WHERE id =3 
T3INSERT INTO t VALUES(3, 3,3);(阻塞)
T4INSERT INTO t VALUES(3, 3,3);(死锁)
LATEST DETECTED DEADLOCK
------------------------
2024-03-10 16:27:22 0x10bc
*** (1) TRANSACTION:
TRANSACTION 486545, ACTIVE 14 sec inserting
mysql tables in use 1, locked 1
LOCK WAIT 3 lock struct(s), heap size 1136, 2 row lock(s)
MySQL thread id 4, OS thread handle 7296, query id 3007 localhost ::1 root update
INSERT INTO t VALUES(3, 3,3)
*** (1) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 638 page no 3 n bits 80 index PRIMARY of table `test`.`t` trx id 486545 lock_mode X locks gap before rec insert intention waiting
Record lock, heap no 3 PHYSICAL RECORD: n_fields 5; compact format; info bits 00: len 4; hex 80000005; asc     ;;1: len 6; hex 000000046952; asc     iR;;2: len 7; hex 4b0000019207d7; asc K      ;;3: len 4; hex 80000005; asc     ;;4: len 4; hex 80000005; asc     ;;*** (2) TRANSACTION:
TRANSACTION 486546, ACTIVE 7 sec inserting
mysql tables in use 1, locked 1
3 lock struct(s), heap size 1136, 2 row lock(s)
MySQL thread id 5, OS thread handle 4284, query id 3012 localhost ::1 root update
INSERT INTO t VALUES(3, 3,3)
*** (2) HOLDS THE LOCK(S):
RECORD LOCKS space id 638 page no 3 n bits 80 index PRIMARY of table `test`.`t` trx id 486546 lock_mode X locks gap before rec
Record lock, heap no 3 PHYSICAL RECORD: n_fields 5; compact format; info bits 00: len 4; hex 80000005; asc     ;;1: len 6; hex 000000046952; asc     iR;;2: len 7; hex 4b0000019207d7; asc K      ;;3: len 4; hex 80000005; asc     ;;4: len 4; hex 80000005; asc     ;;*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
RECORD LOCKS space id 638 page no 3 n bits 80 index PRIMARY of table `test`.`t` trx id 486546 lock_mode X locks gap before rec insert intention waiting
Record lock, heap no 3 PHYSICAL RECORD: n_fields 5; compact format; info bits 00: len 4; hex 80000005; asc     ;;1: len 6; hex 000000046952; asc     iR;;2: len 7; hex 4b0000019207d7; asc K      ;;3: len 4; hex 80000005; asc     ;;4: len 4; hex 80000005; asc     ;;*** WE ROLL BACK TRANSACTION (2)
------------
TRANSACTIONS

 另外两个事务一个加读锁间隙锁,一个加写锁间隙锁导致和意向插入锁冲突死锁的例子就不举了,原理跟上面一模一样。

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

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

相关文章

英语同传翻译,北京本地同声传译收费价格多少

同声传译是一项高度专业化的服务,广泛应用于国际会议、商务洽谈、法庭审判等场合。由于其对译员的语言能力、专业知识以及应变能力的极高要求,使得同声传译的收费价格也相对较高。那么,英语同传翻译北京本地同声传译的收费价格到底是多少呢&a…

Likeshop多商户高级商城系统已上线,支持DIY页面设计,打造个性化商城!

Likeshop多商户高级商城系统来啦!这是一款功能强大、灵活多样的电商平台解决方案,旨在为企业提供一站式的多渠道商城搭建服务。该系统支持多种经营模式,包括平台自营、联营、招商等,为企业提供了丰富的运营选择。无论运营还是二开…

【原创】浅谈银行票据ABS的几种模式

前 言 2017年6月20日,中国票据网宣布下线,这位承载着无数票据人回忆的老朋友虽然离开了大家,但是**以票据类资产作为基础资产在沪深证券交易所发行的资产支持证券(以下简称“票据ABS”)**却方兴未艾,自201…

Ajax(2)

图片上传 传图片文件不能像传文字一样用JSON格式,可以用form-data类型携带文件 1.获取图片文件对象 2.使用FormData(浏览器内置的构造函数)携带图片文件 3.提交表单数据到服务器,返回图片网址 这里可能用到的事件监听器&#…

低功耗漏电保护电路芯片D54123B介绍

概 述 A)、D54123B是一款高性能 CMOS 漏电保护器专用电路。芯片内部包含稳压电源、放大电路、比较器电路、延时电路、计数器电路、跳闸控制电路及跳闸驱动电路。芯片外围应用有脱扣线圈、压敏电阻、稳压二级管、二级管、电阻、电容等元器件。 B)、内部…

权限管理系统-0.4.1

5.4 权限管理前端开发 5.4.1 src/components 新建ParentView文件夹&#xff0c;并在文件夹中新建index.vue文件。 并在index.vue中加入以下内容&#xff1a; <template><router-view /> </template>5.4.2 layout/components/Sidebar/index.vue routes() …

金蝶云星空对接打通阿里宜搭逐个单据查询接口与新增表单实例接口

金蝶云星空对接打通阿里宜搭逐个单据查询接口与新增表单实例接口 数据源平台:金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践&#xff0c;面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司&#xff0c;提供一个通用的ERP服务平台。…

网络编程:网络编程基础

一、网络发展 1.TCP/IP两个协议阶段 TCP/IP协议已分成了两个不同的协议&#xff1a; 用来检测网络传输中差错的传输控制协议TCP 专门负责对不同网络进行2互联的互联网协议IP 2.网络体系结构 OSI体系口诀&#xff1a;物链网输会示用 2.1网络体系结构概念 每一层都有自己独…

邮件营销案例分析:哪些因素决定营销效果?

邮件营销案例的关键要素&#xff1f;电子邮件营销案例有哪些&#xff1f; 邮件营销一直是一种重要的推广手段。然而&#xff0c;邮件营销的效果并非一蹴而就&#xff0c;它需要多方面的因素共同作用。AokSend将通过一系列邮件营销案例的分析&#xff0c;探讨哪些因素决定了邮件…

海淘网站#跨境电商#淘宝数据#建站网站#前端源码❀

代购业务近年兴起的一种购物模式&#xff0c;是帮国外客户购买中国商品。主要通过外贸代购模式&#xff0c;把淘宝、天猫等电商平台的全站商品通过API接入到你的网站上&#xff0c;瞬间就可以架设一个有数亿产品的大型网上商城&#xff0c;而且可以把这些中文的商品全部自动翻译…

商家转账到零钱转账场景怎么选择

商家转账到零钱是什么&#xff1f; 商家转账到零钱功能整合了企业付款到零钱和批量转账到零钱&#xff0c;支持批量对外转账&#xff0c;操作便捷。如果你的应用场景是单付款&#xff0c;体验感和企业付款到零钱基本没差别。 商家转账到零钱的使用场景有哪些&#xff1f; 商…

【强化学习2--基于策略梯度的方法】

文章目录 深度强化学习---基于策略梯度的方法为什么要用策略梯度方法&#xff1f;策略梯度方法的优势策略梯度定理REINFORCEActor-CriticA2C:Advantage Actor-CriticPPO总结 深度强化学习—基于策略梯度的方法 本篇主要介绍单智能体强化学习——基于策略梯度的方法。 为什么要…

如何利用百度SEO优化技巧将排到首页

拥有一个成功的网站对于企业和个人来说是至关重要的&#xff0c;在当今数字化的时代。在互联网上获得高流量和优质的访问者可能并不是一件容易的事情&#xff0c;然而。一个成功的SEO战略可以帮助你实现这一目标。需要一些特定的技巧和策略、但要在百度搜索引擎中获得较高排名。…

手写简易操作系统(六)--内存分页

前情提要 上一节我们讲到了获取物理内存&#xff0c;这节我们将开启内存分页 一、内存分页的作用 内存分页是一种操作系统和硬件协同工作的机制&#xff0c;用于将物理内存分割成固定大小的页面&#xff08;通常为4KB&#xff09;并将虚拟内存空间映射到这些页面上。内存分页…

【更新】上市公司“宽带中国”战略数据集(2000-2022年)

参照李万利&#xff08;2022&#xff09;、薛成&#xff08;2020&#xff09;等人的做法&#xff0c;根据企业所在城市入选“宽带中国”试点战略的批次构建DID。如果样本期间内企业所在城市被评选为“宽带中国” 试点城市&#xff0c;则该地区企业样本在入选当年及以后年份取1&…

打卡学习kubernetes——了解k8s基本概念

目录 1 Container 2 Pod 3 Node 4 Namespace 5 Service 6 Label 7 Annotations 8 Volume 1 Container Container(容器)是一种便携式、轻量级的操作系统级虚拟化技术。它使用namespace隔离不同的软件运行环境&#xff0c;并通过镜像自包含软件的运行环境&#xff0c;从而…

Focal and Global Knowledge Distillation forDetectors

摘要 文章指出&#xff0c;在目标检测中&#xff0c;教师和学生在不同领域的特征差异很大&#xff0c;尤其是在前景和背景中。如果我们 平等地蒸馏它们&#xff0c;特征图之间的不均匀差异将对蒸馏产生负面影响。因此&#xff0c;我们提出了局部和全局蒸馏。局部蒸馏分离前景和…

【Spring Boot系列】快速上手 Spring Boot

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

macOS - 获取硬件设备信息

文章目录 1、CPU获取方式 一&#xff1a; system_profiler获取方式二&#xff1a;sysctl&#xff0c; machdepmachdep 2、内存3、硬盘4、显卡5、声卡6、光驱7、系统序列号8、型号标识符9、UUID 等信息 10. 计算机名称 1、CPU 获取方式 一&#xff1a; system_profiler % syst…

深信服技术认证“SCCA-C”划重点:深信服应用交付AD

为帮助大家更加系统化地学习云计算知识&#xff0c;高效通过云计算工程师认证&#xff0c;深信服特推出“SCCA-C认证备考秘笈”&#xff0c;共十期内容。“考试重点”内容框架&#xff0c;帮助大家快速get重点知识 划重点来啦 *点击图片放大展示 深信服云计算认证&#xff08;S…