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

面试库MySQL精准打击之间隙锁

5月13日 渡缘祠投稿
  时隔很久,又开始码字了,在最近这段时间将会给大家带来MySQL相关的面试知识点分享,从原理及面试考察点全面剖析、浓缩、提炼面试表达点。
  前言
  本次分享MySQL间隙锁及RR隔离级别情况下常见的加锁分析,那么废话不多讲直接撸起袖子干。什么是间隙锁
  间隙锁
  OK如上图所示,MySQL中的间隙锁(nextkeylock)由间隙锁(gaplock)和行锁(rowlock)组成。在使用过程中,会把查询范围的整个区间进行锁定,咱们可以先这样理解,后面慢慢剖析。为什么有间隙锁
  在RR隔离级别下,则有可能出现幻读(强调新增,前后两次查询结果不一致)的情况。所以在MySQL中,加入了间隙锁对当前读下的幻读进行解决。为什么会出现幻读
  我们来分析一下此时RC隔离级别b普通索引的加锁情况:
  RC隔离级别下的幻读
  可以看到RC隔离级别下,b5的记录加上了X锁,但是(0,5)还有(5,10)的间隙没有锁的情况,所以在这个间隙中可以插入新的数据。
  现在我就可以回答出为什么会产生幻读了。产生幻读的原因是,行锁只能锁住行,但是新插入记录的这个动作,要更新的是记录之间的间隙。因此,为了解决幻读的问题,InnoDB在RR隔离级别引入了新的锁,它就是间隙锁(GapLock)。RC隔离级别下的加锁情况
  下面进行测试表结构创建:createtabletest(idint(11)NOTNULL,aint(11)NOTNULL,bint(11)NOTNULL,cint(11)NOTNULL,PRIMARYKEY(id),UNIQUEKEYunixkey(a),KEYixkey(b))ENGINEInnoDB;insertintotestvalues(0,0,0,0),(5,5,5,5),(10,10,10,10),(20,20,20,20);
  创建一张test表,id是主键,a是唯一索引,b是普通索引,c是没有索引。
  现在假设是在RC隔离级别下,我们来做一个实验看看:
  事务A
  事务B
  setsessiontransactionisolationREADCOMMITTED;
  setsessiontransationisolationREADCOMMITTED;
  
  selectfromtestwhereb5
  返回:(5,5,5,5)
  
  insertintotestvalues(6,6,5,5);
  selectfromtestwhereb5
  返回:(5,5,5,5),(6,6,5,5)
  
  由上面实验得出,在RC隔离级别下,事务A对b5这一行记录加了X锁,但是事务B插入一条新的记录的b字段也是为5,然后在事务A中可以查出b5有两条记录,这个就产生了幻读。
  也就是说,幻读是指一个事务前后两次查询同一范围的时候,后一次查询看到了前一次查询没有看到的行记录。RR隔离级别下的加锁情况
  加锁分析(以下默认都是RR隔离级别并且都是当前读)
  这里我挑选出RR隔离级别下三种常见的情况进行SQL加锁分析:RR隔离级别,where字段没有索引RR隔离级别,where字段有普通索引RR隔离级别,where字段有唯一索引
  (1)RR隔离级别无索引
  RR隔离级别无索引
  上图所示,GAP锁加在c字段的(负无穷,0),(0,5),(5,10),(10,20),(20,正无穷)。但是在RR隔离级别下,我们都是默认是用nextkeyLock(行锁间隙锁),所以我们都是默认是左开右闭,同时也得知了所有的记录都加上了X锁及GAP锁(可以理解成表锁)。因此这张表在执行该SQL期间并未commit的话,除了不加锁的快照读事务,其他任何加锁的操作都将堵塞,如果是线上环境,将会是件非常有意思的事。
  总结一下:RR隔离级别下,无索引的条件字段的当前读不仅会把每条记录都加上X锁,还会加上GAP锁。
  (2)RR隔离级别唯一索引
  唯一索引的情况是最简单的,因为不管是RC隔离级别或者是RR隔离级别,唯一索引都只能查出一条记录,只会在对应的行记录加上X锁就没了。
  为什么会这样?
  因为GAP锁的目的是为了防止同一事务被连续两次当前读,然后两次读的情况不一致。如果能够保证字段是唯一的(唯一索引),其实就是最多只有一条记录满足条件,所以查询唯一索引的时候绝对不会出现GAP锁。
  可以理解为RR唯一索引和RC唯一索引的加锁情况是一样的就好了。
  (3)RR隔离级别普通索引
  RR隔离级别普通索引
  如上图所示,普通索引字段b10给两条记录加了X锁,并且把聚集索引树的两条记录也加了X锁。GAP锁的是b的范围(5,10),(10,正无穷)。所以nextkeyLock锁的是(5,10〕,(10,10〕,(10,正无穷〕。期间只要是b在nextkeyLock的范围内就更新全部阻塞。
  举例:insertintotestvalues(6,6,6,6)就会被阻塞,原因就是RR隔离级别的间隙锁锁住了记录之间的间隙,所以会阻塞总结这次分享了RC隔离级别下出现幻读的情况,然后分析了为什么会出现幻读。InnoDB为了解决幻读,在RR下引入了GAP锁,和行锁组成nextkeyLock分析了三种常见情况的加锁情况操作。
投诉 评论 转载

面试库MySQL精准打击之间隙锁时隔很久,又开始码字了,在最近这段时间将会给大家带来MySQL相关的面试知识点分享,从原理及面试考察点全面剖析、浓缩、提炼面试表达点。前言本次分享MySQL间隙锁及……vivo智能手表vivoWATCH2随着智能时代的日益发展,智能穿搭现在也发展得逐渐强大。今天介绍的是vivo的智能手表vivoWATCH2。屏幕方面,屏幕尺寸为1。43英寸,支持60赫兹刷新率。采用……聪明的人,在人情往来时,会保持这几种距离01hr很多东西,只能远观,而不可亵玩。好的感情,如一朵莲花,值得欣赏,但是不能触碰,更不能摘下来。亚里士多德说过:聪明人并不一味追求快乐,而是竭力避免不愉快。……建议中老年人生活别太节俭,多吃5种高蛋白食物,身体好人一旦到了中年,身体的各个器官开始退化,稍微不注意就会引来一些小病,最重要的就是提高自身的抵抗力。只有身体健健康康的,才是这辈子最大的幸福。提高身体抵抗力不只靠锻炼,在饮……2022年上半年新品手机盘点小米荣耀vivo和OPPO等激战文焦运杰校对李俊慧团队新品数量有所下降,折叠屏手机蜂拥而至。这或许是2022年上半年智能手机新品发布呈现出的最大特点之一。对于刚刚结束的2022年上半年,对智……做喜欢的事,做简单快乐的自己弘一大师说:人生不过就是三万多天,借副皮囊而已,生命没有永恒,时间一到,该老得老,该走得走,临了空空的,没你也没我,无一物带走,我们最终都是时间的过客,何必执念,努力过后,得失……NBA发布篮网税单蔡崇信未来5年将花费10亿美元7月首周付清《纽约邮报》记者布莱恩刘易斯最新报道证实,7月份第一周,篮网队老板蔡崇信必须向NBA官方支付1。1亿美元奢侈税,按照篮网队薪资结构分析,未来5年,蔡崇信还将花费10亿美元工资和……排骨刀削面红烧肘子烩粉汤烤羊排猛香哩!陕北霞姐(王敏)(左)和丈夫陈浪(右)在地里干农活。(受访者供图)嗨,大家好,我是霞姐!面对镜头,霞姐的开场自然轻松。没有精致的妆发,没有光鲜的衣着,更没有高端的灶……本月起实施!贵州出台省直住房公积金补息贷款管理办法贵州省住房资金管理中心关于印发《贵州省直住房公积金补息贷款管理办法》的通知省直缴存单位及职工,各有关单位:根据《省人民政府办公厅关于印发贵州省进一步加快重大项……人生有三福平安是福,健康是福,吃亏是福矢志蓝天小的时候,经常听娘说:吃亏是福!人不能太较真,有时候难得糊涂,吃点亏并不一定是坏事。当时并不是太懂。长大了,才明白吃亏是福的道理。原来,母亲这是在教我们做人……次次合作出爆款的秘密?被游戏耽误的电影公司又出手了在游戏圈里,有很多不务正业的厂商,他们在做游戏期间,偷摸着拓展了一堆副业,像什么卖土豆的育碧,做CG的暴雪,炒冷饭的卡普空等等。其中,《倩女幽魂》手游则被玩家誉为被游戏耽误的电……关键篮板绝杀!顾全打出超神一战,中国男篮1分险胜巴林男篮上一轮输给韩国队之后,我们都清楚,中国男篮现在遇到了很大的困难。本场比赛周琦依然无法出场,王哲林身体还没有恢复,两大主力受到伤病的困扰,让中国队的内线优势荡然无存;两节不到的时……
续航提升40GoPro新一代超强续航电池恐怖7次抢断,保罗疯狂打哭榜眼秀!10104,火箭彻底捡到宝2胜7负!篮网遭遇六连败,哈登再次施压,交易810前锋要价出哇哦!太棒了!外国高手盛赞雪飞燕黑头印要怎么做才能去除呢冷嘲热讽造句用冷嘲热讽造句大全如果这样才对造句用才对造句大全那次我感动了时间管理的七条魔法90后小夫妻结婚证火了,自带情侣名,网友百年难遇女性患有疑病症怎么办

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找