城市直播房产教育博客汽车
快传网
汽车报价
买车新车
博客专栏
专题精品
教育留学
高考读书
房产家居
彩票视频
直播黑猫
投资微博
城市上海
政务旅游

在MySQL中,用记录锁或者间隙锁在啥时候合适呢?

5月5日 观潮阁投稿
  在读未提交和读已提交隔离级别下,都只会使用记录锁,不会用间隙锁和NextKey锁。而对于可重复读隔离级别来说,会使用记录锁、间隙锁和NextKey锁。
  那么MySQL啥时候会用记录锁,啥时候会用间隙锁,啥时候又会用NextKey锁呢?今天我们就来做一些测试,弄清楚这个问题。影响因素
  在开始之前,我们需要声明的是:本文所有测试及结论的前提均是在可重复读隔离级别下,以及Innodb存储疫情下。
  根据网上资料,我们大概可以知道,影响其使用哪种行级锁的因素有:索引类型(聚簇索引、唯一二级索引、普通二级索引)匹配类型(精确匹配、唯一匹配、范围匹配)事务隔离级别是否开启Innodblocksunsafeforbinlog系统变量记录是否被标记删除具体的执行语句类型(SELECT、INSERT、DELETE、UPDATE)
  为了让文章相对易懂一些,我准备重点测试索引类型与匹配类型两个影响因素。对于其他的影响因素,我将不做改动。例如:事务隔离级别固定为可重复读,Innodblocksunsafeforbinlog固定为false。而第5、6点相对来说简单一些,则我们会简单带过。
  针对上面几个影响因素,我们指定了几个测试实验,分别是:聚簇索引精确匹配聚簇索引范围匹配唯一二级索引精确匹配唯一二级索引范围匹配普通二级索引精确匹配普通二级索引范围匹配表结构CREATETABLEtest。pricetest(idBIGINT(64)NOTNULLAUTOINCREMENT,priceINT(4)NULL,PRIMARYKEY(id));表中数据1,apple,102,orange,3050,perl,60聚簇索引精确匹配
  为了测试聚簇索引精确匹配下加锁的类型,我们采用如下的测试方法。
  事务A执行下面命令:selectfrompricetestwhereid2
  执行showengineinnodbstatusG;查看锁信息如下图所示。
  可以看到,其是对id为2的索引加了一个记录锁。
  此时事务B执行下面命令:updatepricetestsetprice25whereid2;
  执行之后,我们会发现事务B阻塞住了。
  那如果聚簇索引的值找不到对应的记录呢,将会是一个什么样的结果呢?
  我们再来测试一下,开始之前记得将事务A和B回滚恢复。
  事务A执行下面命令,其中id为5的记录是不存在的:selectfrompricetestwhereid5
  执行showengineinnodbstatusG;查看锁信息如下图所示。
  可以看到,其加了一个间隙锁,该间隙锁应该是(2,50)这个范围。
  我们可以通过在事务B执行如下命令来测试下间隙锁的范围。执行下面任何一个命令,可以通过updatepricetestsetprice25whereid2;updatepricetestsetprice25whereid50;执行下面任何一个命令,都将阻塞insertintopricetest(id,name,price)values(3,test,25);insertintopricetest(id,name,price)values(5,test,25);insertintopricetest(id,name,price)values(49,test,25);
  由此我们可以得出结论:聚簇索引精确匹配,如果能够定位到唯一一条存在的记录,那么其会使用记录锁。如果该记录不存在,那么则会使用间隙锁。聚簇索引范围匹配
  事务A执行下面命令:selectfrompricetestwhereid2
  执行showengineinnodbstatusG;查看锁信息如下图所示。
  可以看到,事务A一共加了3个锁,其中1个记录锁,2个NextKey锁。其中1个记录锁是对id为2的索引加的锁,NextKey锁是对(2,50〕和(50,正无穷)这两个区间加的锁。
  在事务B执行下面命令可以验证间隙锁的加锁区间:执行下面任意一条语句,都会阻塞updatepricetestsetprice25whereid2;updatepricetestsetprice25whereid50;insertintopricetest(id,name,price)values(5,test,25);insertintopricetest(id,name,price)values(60,test,25);
  这里我们思考一下,如果范围匹配的值并不存在,那么会是什么情况呢?
  即事务A执行如下语句,其中id为5的记录是不存在的。selectfrompricetestwhereid5
  执行showengineinnodbstatusG;查看锁信息如下图所示。
  可以看到,其实加了2个NextKey锁,锁的范围应该是(2,50)和〔50,无穷)。
  此时事务B执行下面命令,应该都会阻塞。执行下面任意一条语句,都会阻塞updatepricetestsetprice25whereid50;insertintopricetest(id,name,price)values(5,test,25);insertintopricetest(id,name,price)values(45,test,25);insertintopricetest(id,name,price)values(60,test,25);
  由此我们可以得出结论:聚簇索引范围匹配,会使用记录锁间隙锁NextKey锁。唯一二级索引精确匹配
  事务A执行下面命令:selectfrompricetestwhereprice10
  执行showengineinnodbstatusG;查看锁信息如下图所示。
  可以看到,其加的行级锁是2个记录锁,应该是price10这条索引记录的锁。
  此时,如果在事务B执行下面命令:执行下面任意一条语句,都会阻塞updatepricetestsetnametestnamewhereprice10;
  执行之后,我们会发现事务B阻塞住了。
  由此我们可以得出结论:唯一二级索引与聚簇索引非常类似,都只有一个唯一值,都是使用记录锁。唯一二级索引范围匹配
  事务A执行下面命令:selectfrompricetestwhereprice30
  执行showengineinnodbstatusG;查看锁信息如下图所示。
  可以看到,事务A一共有5个行锁,其中3个NextKey锁,2个记录锁。大致可以猜测出两个记录锁分别是price为30和60的记录锁。3个NextKey锁则是(10,30)、(30,60)、(60,正无穷)三个范围。
  为了验证我们上面的结论,我们在事务B执行下面命令,每条SQL都会阻塞住:执行下面任意一条语句,都会阻塞updatepricetestsetnameprice30whereprice30;updatepricetestsetnameprice60whereprice60;insertintopricetest(id,name,price)values(5,test,20);insertintopricetest(id,name,price)values(5,test,40);insertintopricetest(id,name,price)values(5,test,70);
  执行之后,我们会发现事务B阻塞住了。
  由此我们可以得出结论:唯一二级索引范围匹配,会使用记录锁间隙锁NextKey锁。普通二级索引精确匹配
  事务A执行下面命令:
  执行showengineinnodbstatusG;查看锁信息如下图所示。
  可以看到,其不仅有一个记录锁,还有一个间隙锁。这里可以猜测记录锁是apple索引的记录锁,而间隙锁则是(负无穷,orange)的间隙锁。
  我们可在事务B执行如下命令验证一下:执行下面任意一条语句,都会阻塞insertintopricetest(id,name,price)values(5,aa,20);insertintopricetest(id,name,price)values(5,ha,20);执行下面的语句正常执行insertintopricetest(id,name,price)values(5,orb,20);
  之所以二级索引的精确匹配会有间隙锁,是因为二级索引可能匹配到多个。因此当匹配到一个的时候,会继续往后匹配,直到匹配到一个不符合的记录,随后就会以该不符合的记录(这里是orange)作为值做一个间隙锁。
  由此我们可以得出结论:普通二级索引精确匹配,会使用记录锁间隙锁NextKey锁。普通二级索引范围匹配
  事务A执行下面命令:
  执行showengineinnodbstatusG;查看锁信息如下图所示。
  从上图可以看到起一共有2个记录锁,3个NextKey锁。其中2个记录锁应该是orange和perl两个记录,3个NextKey锁,应该是(apple,orange〕、〔orange,perl)、〔perl,正无穷)。
  我们可在事务B执行如下命令验证一下:执行下面任意一条语句,都会阻塞验证记录锁updatepricetestsetprice1updatepricetestsetprice1验证间隙锁insertintopricetest(id,name,price)values(5,ba,20);insertintopricetest(id,name,price)values(5,orb,20);insertintopricetest(id,name,price)values(5,pes,20);执行下面的语句正常执行updatepricetestsetprice1insertintopricetest(id,name,price)values(5,aa,20);
  可以看到普通二级索引范围匹配与普通二级索引精确匹配结果是类似的。
  我们可以得出结论:普通二级索引范围匹配,会使用记录锁间隙锁NextKey锁。总结
  我们做了这么多个测试,虽然有3种索引类型(聚簇索引、唯一二级索引、普通二级索引)和2种匹配类型(精确匹配、范围匹配),它们两两组合可以得出6种情况,再加上查询的值是否存在,可能有更多的可能性。但是我们发现它们的结构都非常类似,基本上都跟查找的记录是否存在,以及查找的记录是否是唯一的相关。
  由此,我们大致可以得出结论:如果查找的记录是唯一且存在的,那么只会使用记录锁,而不会使用间隙锁或NextKey锁。如果查找的记录不唯一或者不存在,那么就会使用NextKey锁和间隙锁。
  通过这次测试,我们大概知道了加锁的一些原则,但实际上Innodb的关于加锁的源码还是比较复杂的。
  Originalreprint:https:mp。weixin。qq。comsucmIfX8Jc15CP1pqhzbuZg
投诉 评论 转载

在MySQL中,用记录锁或者间隙锁在啥时候合适呢?在读未提交和读已提交隔离级别下,都只会使用记录锁,不会用间隙锁和NextKey锁。而对于可重复读隔离级别来说,会使用记录锁、间隙锁和NextKey锁。那么MySQL啥时候……李佳琦的双十一,改变了什么?美眉们,我们来咯!10月24日下午3点,伴随着双十一预售首日的热络,李佳琦准时出现在淘宝直播间。这天,李佳琦直播间的主题是超级美妆节,他共直播了9小时53分33秒。星图数据显示……地球上本没有人,第一个人究竟是从何而来的?有定论吗?人由黄帝所造、女娲造人、植物变的、动物变的等等,都是如今争议比较多的说法,而科学之中唯一承认的理论就是人是生物进化而来的,并且是在约5000多万年前,灵长类动物呈辐射状演化,然……豆瓣评分冲8。5,票房奔5000万隐入尘烟为啥后劲那么大?搜狐娱乐讯(哈麦文)没想到,已经上映近两个月,上线了各大视频网站的《隐入尘烟》单日票房创新高了。在《独行月球》《明日战记》《断桥》《新神榜:杨戬》几部重磅商业片轮番表现过……定了!湖人亮剑!詹姆斯领衔,3大强援复出,湖人实力大升级湖人的下一场比赛将是本周六对阵活塞。在下一场比赛之前,湖人有多达4天的休息时间,这将让他们养精蓄锐,好好准备与活塞的比赛,争取连胜。湖人迎来好消息,据名记Shams报道,……氢燃料电池汽车是未来吗?氢能汽车的可行性白日梦还是下一件大事?关注燃料电池和氢气汽车随着电动革命以越来越快的速度重新绘制汽车版图,你会认为电池电动汽车(BEV)已经赢得了争论以及其他……10月27日,NBA有10场比赛,让我们吃瓜继续10月27日,NBA激战正酣,10场比赛场场精彩,让我们来看看战况:1、雄鹿队继续连胜。虽然篮网杜兰特和欧文合砍60分,但字母哥得到43145,他率队在下半场打出小高潮实……2010年,NBA著名球星被枪杀身亡!朋友说他就不该娶教练的Hello大家好欢迎收看最新一期节目我是小渊。今天我们讲一起NBA球星遇害的案件,不过这个球星不是科比。这位球星的经历充满幸运但又充满不幸,甚至夹杂很多讽刺。……不要用解释去掩盖谎言,谎言是见不到太阳的温暖全文慌言见不到太阳(原创:诗一首)不要用解释去掩盖谎言,不要用谎言当遮羞布狡辩,做人有正气一身清白,避免掉进理不清的泥潭。歪心思的人常用谎言,说……辽篮终于开启备战!杨鸣无奈直言我们是全CBA备战下赛季最晚的6月10日,辽篮官方发布消息,随着几名老队员归队,球队今夏休赛的备战才算正式开启。而主帅杨鸣也直言,我们是全CBA备战下赛季起步最晚的球队。辽篮今夏的休赛期在人员上真是困……远程开机远程桌面一条龙,向日葵开机插座C1Pro开箱体验因为工作需要,我偶尔会远程访问公司里的办公电脑,通过向日葵远程控制软件,可以很方便地远程进行文件的调取和文稿发布,这样的工作模式一直沿用至今,工作效率也得到了公司认可。只……周大福周大生周生生周六福为啥珠宝品牌扎堆姓周?图片源于网络图文无关周大福、周大生、周生生、周六福、周囍囍、周大金等,商场里一批批以周某某格式命名的珠宝品牌扎堆冒出来。珠宝界周姓大家族自带光环,却让珠宝小白傻傻分不清。……
3台无人驾驶机器协同收粮运粮不打架美联储收割自己人,将引爆美国债务危机,218吨黄金从欧美运抵抄写第一天行业关注稳健医疗因违反医疗器械监督管理条例被处罚慢性盆腔炎症有哪些症状魅族20还在打样?吉利手机Q2发布小米13详细配置曝光小巧便携,直插即用科唛VimoS迷你无线麦克风体验2023年买手机为什么不推荐128GB,看看内行人怎么说11。21足球竞彩推荐世界杯赛事精选推荐三串一内附比分胜平负性感御姐姿态婀娜妩媚,端庄气质撩人心怀,袅袅气息淋漓绽放青果巷口的古树,果子如金甲挂树,却不是银杏,那是啥?大衣哥儿子找个媳妇怎么那么难?刚踹走一个陈亚男,又来了个陈萌
大班折纸案例牵牛花简析快消品行业的销售费用管理论文平价眼影哪个好用,细腻又漂亮的小眼睛怎么打造好文:口字旁的当怎么没有了热博聚热点网 说文明话,做文明事演讲稿论文写作课的教学内容女人想你了,会有这些控制不了的行为,尤其是人到中年47准三双!老詹生日夜爆发!托布1917,湖人大逆转!老鹰3触摸春天氮酮的用量为你祈福女性更年期后遗症

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找江西南阳嘉兴昆明铜陵滨州广东西昌常德梅州兰州阳江运城金华广西萍乡大理重庆诸暨泉州安庆南充武汉辽宁