谁还没经历过死锁呢
Hollis
共 2889字,需浏览 6分钟
· 2022-01-01
select ... for update
语句查询订单是否存在,如果不存在才插入订单记录。死锁的发生
CREATE TABLE `t_order` (
`id` int NOT NULL AUTO_INCREMENT,
`order_no` int DEFAULT NULL,
`create_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_order` (`order_no`) USING BTREE
) ENGINE=InnoDB ;
t_order
表里现在已经有了 6 条记录:select ... for update
语句,目的为了防止事务执行的过程中,有其他事务插入了记录,而出现幻读的问题。select ... for update
语句,而使用了单纯的 select 语句,如果是两个订单号一样的请求同时进来,就会出现两个重复的订单,有可能出现幻读,如下图:为什么会产生死锁?
Record Loc,记录锁,锁的是记录本身; Gap Lock,间隙锁,锁的就是两个值之间的空隙,以防止其他事务在这个空隙间插入新的数据,从而避免幻读现象。
begin;
//对读取的记录加共享锁
select ... lock in share mode;
commit; //锁释放
begin;
//对读取的记录加排他锁
select ... for update;
commit; //锁释放
(2, +∞]
范围的记录,然后期间如果有其他事务在这个锁住的范围插入数据就会被阻塞。select id from t_order where order_no = 1008 for update;
(1006, +∞)
。那么,当事务 B 往间隙锁里插入 id = 1008 的记录就会被锁住。insert into t_order (order_no, create_date) values (1008, now());
select ... for update
语句并不会相互影响。select ... for update
语句后都持有范围为(1006,+∞)
的间隙锁,而接下来的插入操作为了获取到插入意向锁,都在等待对方事务的间隙锁释放,于是就造成了循环等待,导致死锁。如何避免死锁?
设置事务等待锁的超时时间。当一个事务的等待时间超过该值后,就对这个事务进行回滚,于是锁就释放了,另一个事务就可以继续执行了。在 InnoDB 中,参数 innodb_lock_wait_timeout
是用来设置超时时间的,默认值时 50 秒。当发生超时后,就出现下面这个提示:
开启主动死锁检测。主动死锁检测在发现死锁后,主动回滚死锁链条中的某一个事务,让其他事务得以继续执行。将参数 innodb_deadlock_detect
设置为 on,表示开启这个逻辑,默认就开启。当检测到死锁后,就会出现下面这个提示:
有道无术,术可成;有术无道,止于术
欢迎大家关注Java之道公众号
好文章,我在看❤️
评论
为啥大模型还没完全取代你?
点击下方“JavaEdge”,选择“设为星标”第一时间关注技术干货!免责声明~任何文章不要过度深思!万事万物都经不起审视,因为世上没有同样的成长环境,也没有同样的认知水平,更「没有适用于所有人的解决方案」;不要急着评判文章列出的观点,只需代入其中,适度审视一番自己即可,能「跳脱出来从外人的角度看看现
JavaEdge
0
是谁还在坚持用 QQ?腾讯回应:好冷漠...
转自:电脑报近日,“仍有5亿人坚持用QQ”的话题登上微博热搜,引发网友热议。根据腾讯财报,截至2023年第三季度,QQ智能终端月活跃用户数为5.58亿,仅占微信四成。但换个角度看,作为一款25岁的元老级社交应用,QQ破5亿的月活仍然是很多社交App羡慕的存在,超过了微博和知乎总和。只是在用户增量上,
dotNET全栈开发
10
47岁了,要失业了。工作二十多年,存款大几百万,两套房,目前为是否找工作纠结,还是不甘心,觉得还没老就没用了
上一篇:得知下属工资比我高5K,我气得直接提了离职,HR却疑惑问我为什么,能留下再加5k,有机会升职管整个部门47岁了,面临失业的现实,但若能在私营企业工作至这一年龄,已经算是达到了职业生涯的一个高峰。面对这样的情况,是否应该感到沮丧?其实不必,考虑到个人的资产状况——拥有两套房产和数百万的存款,加
开发者全社区
10
互联网打工多年,还没熬到期权兑现
来源 | 豹变作者 | 詹方歌编辑 | 邢昀2021年往前数十年,都可以称得上中国互联网发展史上的最大红利期。互联网公司的市值和多元化业务一起高歌猛进。当时公司和市场发展的巨额财富也通过期权等实在惠及了员工。灯红酒绿是年会,钟鸣鼎食是IPO酒会,互联网大厂们汇集的城市也
互联网行业观察
23
我想知道,高德和百度,谁的算法更准?
点击上方牲产力关注我在线提问,平常导航你是用高德还是百度呢?我个人喜欢用百度地图,媳妇儿是用高德,但而且她打车也会直接用高德,我还会再用滴滴来单独打车。总感觉导航嘛,不同软件应该大差不差,没想到一番搜罗还真有些奇奇怪怪的对比。01 大路vs小路江湖传闻,当百度还在大路上给你规划地图时,高德已经给你寻
TTTEED
2
这谁顶得住呀,纯欲系女神石原里美
石原里美,这位日本娱乐圈的闪耀女神,凭借着超高颜值和独特魅力,征服了无数观众的心。说起石原里美,大家一定不会陌生,她曾主演过多部热门日剧,塑造了许多令人难以忘怀的角色形象。石原里美的颜值,可谓是毋庸置疑的。她有着精致立体的五官,淡雅如水的眼睛,恰到好处的鼻梁,以及让人羡慕的鹅蛋脸。在众多美女如云的娱
python教程
1
为什么网上这么多破解 Intellij IDEA 的工具,但是官方却不管呢?
来源:zhihu.com/question/649660322今天在逛知乎的时候,看见一个关于Intellij IDEA的话题:Intellij IDEA是在业界被公认为最好的Java开发工具,但是国内大多数都不买正版软件,都是下载破解版或者使用激活插件激活来使用,这种情况Intellij IDEA
程序IT圈
0
千万别来比亚迪!真的,谁来谁后悔!
在网络上,经常会有人发表意见劝阻别人不要加入某家公司,但这又引发了一个问题:如果不去那家公司,去哪里呢?现今情况下,想要进入比亚迪这样的大公司并不容易,许多人连门槛都触摸不到。比亚迪已经成为行业中的佼佼者,拥有一定学历是许多人的障碍。如果你来自名校,那么进入的机会相对较大,但非名校的人则需要看具体情
程序IT圈
0