范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

MySQL如何解决幻读

  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;  insert into t values(0,0,0),(5,5,5), (10,10,10),(15,15,15),(20,20,20),(25,25,25);
  什么是幻读
  在可重复读的隔离级别下,我们如果只对id=5(也就是d=5由于d上没有索引,所以会走主键索引树)加行锁,我们可以分析以下SessionA会出现什么情况: Q1查询只会返回id=5这一行,也就是(5,5,5) T2时刻Session B把id为0这一行的d值改成5,因此Q2查询查出来的是id=0和id=5的这两行(0,0,5),(5,5,5) T4时刻,Session C插入一行(1,1,5),因此Q3查询查出来的是id=0、1、5的这三行(0,0,5),(1,1,5),(5,5,5)
  注意:上述Session A中查询都是当前读,关于当前读可以见MySQL MVCC(多版本控制)这篇文章。
  Q3读到id=1这一行的现象成为幻读。 幻读是指一个事务在前后两次查询同一个范围的数据的时候,后一次查询查到了第一次查询没有查到的行 。
  在可重复隔离级别下,普通的查询时快照读,是无法看到别的事务插入的数据的,只有当前读才会出现幻读 。
  幻读有什么问题? 语义上带来了破坏。
  Session A在T1时刻就声明我要把所有d=5的行锁住,不允许别的事务进行读写操作,但是实际上别的事务可以破坏这个声明。 数据一致性上会有问题。
  经过T1时刻,id=5这一行变成(5,5,100),当然这个结果最终是在T6时刻进行提交 经过T2时刻,id=0这一行变成了(0,5,5) 经过T4时刻,表里面新生成了一行(1,5,5)
  数据似乎很正常没有什么问题,但是如果你去分析binlog就会发现有问题了: T2时刻,Session B事务提交,写入两条语句; T4时刻,Session C事务提交,写入两条语句; T6时刻,Session A事务提交,写入update t set d=100 where d=5这条语句
  上述形成的binlog如下: -- binlog的模式是statement; update t set d=5 where id=0; /*(0,0,5)*/ update t set c=5 where id=0; /*(0,5,5)*/  insert into t values(1,1,5); /*(1,1,5)*/ update t set c=5 where id=1; /*(1,5,5)*/  update t set d=100 where d=5;/*所有d=5的行,d改成100*/
  这个binlog如果被拿到备库执行或者用来克隆一个数据库,这三行的结果会变成(0,5,100)、(1,5,100)和(5,5,100),此时id=0和id=1这两行就出现了数据不一致。
  如何解决幻读?
  产生幻读的原因就是行锁只能锁住行,插入动作更新的是记录之间的间隙。因此为了解决幻读问题,InnoDB引入了间隙锁。
  什么是间隙锁?
  在文章开始的时候我们插入了6条数据,这就会产生7个间隙,如下: (- , 0) (0, 5) (5, 10) (10, 15) (15, 20) (20, 25) (25, + )
  当我们在执行select * from t where d=5 for update的时候,除了给数据库已有的行加行锁以外,还会对7个间隙加锁,这样确保了没有拿到锁的事务无法插入新的记录。
  间隙锁之间没有冲突,跟间隙锁冲突的是往这个间隙中插入一个记录的操作 。
  什么是next-key lock?
  间隙锁和和行锁合称next-key lock,每个next-key lock都是前开后闭区间。
  select * from t where d=5 for update在执行的时候将形成7个next-key lock: (- , 0] (0, 5] (5, 10] (10, 15] (15, 20] (20, 25] (25, + ]
  其中+ 在这里是InnoDB给每个索引加了一个不存在的最大值。
  间隙锁导致死锁?
  Session B的insert会被阻塞,Session A在执行insert的时候会检测到死锁,如下图:
  Session A执行select for update,由于id=8这一行并不存在,因此会加上间隙锁(5,10) Session Bz执行select for update同样也会加上间隙锁,间隙锁之间并不冲突,因此可以执行成功 Session B尝试插入(9,9,9),被Session A的间隙锁阻塞,只好进入等待 Session A尝试插入(9,9,9),被Session B的间隙锁阻塞
  此时两个Session形成死锁等待,InnoDB的死锁检测发现死锁关系,让Session A的insert 语句报错返回。
  间隙锁是在可重复读隔离级别下才会生效,如果将隔离级别设置为读提交,就不会有间隙锁了,但是同时需要解决数据和日志不一致的问题(需要把binlog格式设置为ROW) 。

微信这2个设置不关闭,陌生人就能随意看到你的隐私,快告诉家人本文编辑今日头条作者维权骑士签约用户小俊技术分享独家原创制作未经授权严禁转载,发现抄袭者将进行全网维权投诉分享生活小妙招,享受科技新生活!大家好,欢迎来到今天的知识分享!我是你们的禁止蹭热点,阿里申请元宇宙商标被驳回国内各大巨头正争相布局自己的元宇宙,但商标申请并不太顺利。近日,据公开信息显示,阿里巴巴新加坡控股有限公司申请注册的淘宝元宇宙阿里元宇宙商标,流程状态均变更为驳回通知发文,被驳回商元宇宙实现的核心要素,XR高通已潜心布局十余年此前,高通联合一众XR生态链上的小伙伴,开启了一年一度的2022QualcommXR创新应用挑战赛。在元宇宙风暴席卷全球的当下,这场在XR产业久负盛名的重要赛事,更是得到了得到行业2022数博会聚焦前沿热点科技侧重创新成果转化由于疫情影响,2022中国国际大数据产业博览会改在5月26日线上进行。虽然没有了往届嘉宾云集展会连场的盛况,但本届数博会紧扣抢数字新机享数字价值的年度主题,在论坛设置成果发布上聚焦断供后20万亿灰飞烟灭!比尔盖茨感叹我们的根基动摇了科技巨头打开潘多拉盒子如果说谁是经济全球化最大的受益者,那么答案非美国科技企业莫属。凭借着在早期技术上的领先,包括微软苹果亚马逊特斯拉英伟达英特尔在内的众多科技企业在这场全球化盛宴无货源电商骗局在这个互联网发达的年代,电商行业发展迅速,有许多人靠着电商发了财,很多人就想着自己也能发财,便准备加入这个行业,但想加入这个行业得有货源和仓库啊!这个就难道了很多人,需要的资金投入C函数snprintf的用法和避免踩坑snprintf函数是C语言中非常常用的一个函数,它的作用是格式化一段文本放到指定的缓存中。和它类似的还有sprintf,vsnprintf等。它们都完成类似的功能,但又有些区别,东数西算背后的大棋局出品极新从我国产业构成的角度来说,信息技术已然在经济增长中占据了重要作用。在一些其他产业逐渐沦为夕阳产业之时,信息技术产业仍然保持着旺盛的生命力,从增长率的角度上来说,信息技术的带马斯克的套现戏法改造推特蓝图浮出水面近期,全球首富知名连续创业者埃隆马斯克正忙于为推特描绘未来改造的蓝图。这笔价值440亿美元的收购案,需要一笔数量可观的外界注资。据了解,马斯克向19家知名投资机构兜售了自己的商业蓝怎么评价Acer刚刚发售的AspireS24一体机?谈及工业设计,或许很多人脑海中跳出的第一个品牌就是苹果,但市场上已经涌现出很多不亚于苹果的优秀产品,今天要给大家介绍的AspireS24就是这样一款产品。在相似的尺寸下,Acer推腾讯绝地求生何时出?emmm,首先可以肯定的是国服的吃鸡大概率被企鹅代理了。这个之前WEGAME之前的微博应该稳了,其实呢,被企鹅代理有好有坏的。大家心里也都有数了。先说下好处吧。企鹅庞大的用户群,年
余生不长,和谁在一起,真的很重要人到世上走一遭,总会遇到一些喜欢的人和不喜欢的人,有些人,和他相处得很累,就不要继续相处了。年龄越大,越能明白岁月的无情和苛刻,能遇上一个合适的人,已经是莫大的幸福。和谁在一起,不张译潘粤明出演白夜追凶衍生剧重生,网友表示太期待了不得不说,白夜追凶这个名号现如今已经成为了内地悬疑剧的金字招牌之一了。自从白夜追凶的电视剧在网络平台播出以来,越来越多的观众都被这部剧的剧情和演员所深深折服。所以有很多网友都无比期西宁至成都铁路最新消息!西成铁路海东段前期工作稳步推进2月20日,记者从海东市发展改革委员会获悉,为确保国家重点工程西成铁路建设项目顺利推进,按期投入运营,西成铁路海东段建设协调工作领导小组全力做好协调工两个男人之间的故事,没有基。情,只有感动有一种电影充满了魔力,总能在不急不缓地叙述中,牢牢把人抓住。看后意犹未尽,还会翻出来看第二遍第三遍第四遍今天小编就要和大家聊一部这样的电影,豆瓣60多万人打出了9。2,Top250宣布离婚不到半年,宋仲基宋慧乔就被曝已复合?男方再晒两人亲密宋仲基宋慧乔这一对算是娱乐圈最被看好的夫妻存在,两人因为主演电视剧太阳的后裔而被大众所熟知。而后两人也是相识相知相爱,并且步入婚姻的殿堂,一切都看上去非常的浪漫,也让人所羡慕,两人请别碰我的本命,我会疼七门后台常会收到许多重要到不敢回答的问题,我要不要跟那个人在一起,我不知道该不该考研,我该换一份工作吗?我发现大部分人对自己都有一定困惑,不了解自己的热爱,不清楚自己所信仰的东西。青海将迎大面积降雪进入2月份西宁一直没有下雪已经20天了未见雪花飘飘天气干燥干燥的天气使草原森林火险气象指数不断升高2月17日青海省气象台发布西宁海东海北海南黄南海西格尔木等多地森林草原火险气象等级五菱星辰和长安欧尚X5,谁才是汽车界的小米?众所周知,我国的汽车品牌相比欧美汽车品牌起步较晚,因而通过性价比进行突破,是绝大多数自主品牌进行弯道超车的捷径。而在一众自主品牌中,五菱又是将性价比做到极致的企业。其推出的五菱宏光全球又发现一火星秘境!就在中国青海,隐藏千年却几无人知抖音Tibet87中国地大物博,无奇不有!最近,中国又双叒一绝对秘境被发现,因为风光过于极致,迅速以地球上最像火星的地方爆火全网!这里有全球最大最奇幻的雅丹,像人像神佛像远古城堡像逃离高温!扒一扒那些上海周边的清凉目的地前些天,一条上海气温全国第一的新闻引起了网间热议,而刚刚入伏就有如此高温,让大家不禁对今年夏天的高温心存芥蒂。空调房呆着不舒服,既想亲近自然,又想远离高温?没问题,下面就让我给读者5月新规来啦!事关青海人的车子出行钱袋子!都和你有关我们已经走完了2020年的三分之一随着5月的到来一大波新规新政将实施闯红灯等非现场交通违法罚款可以跨省缴纳微信聊天记录可作为呈堂证供非现场交通违法罚款可跨省异地缴纳农民工工资将得到