目录死锁的产生条件互斥、哀求和保持、不可剥夺、循环等待 MySQL锁类型死锁复现情况:Mysql 5.7版本,Innodb引擎,可重复度隔离级别 隔离级别:可重复度(RR) [code]select @@tx_isolation; [/code]预先插入两条数据
关闭事故自动提交: [code]select @@autocommit; set autocommit=0; [/code]死锁场景一:记载锁循环等待:如果两个事故并发读写相偕行,会由于加锁时机的差别而造成死锁,导致其中一个事故实行失败(mysql可以配置自动检测死锁然后自动断开其中一个innodb_deadlock_detect) [code]## 事故一 # 第一步实行 begin; insert into song_rank(songId,weight) values(17,100) on duplicate key update weight=weight+1; # 第三步实行 insert into song_rank(songId,weight) values(16,100) on duplicate key update weight=weight+1; ## 事故二 # 第二步实行 begin; insert into song_rank(songId,weight) values(16,100) on duplicate key update weight=weight+1; # 第四步实行 insert into song_rank(songId,weight) values(17,100) on duplicate key update weight=weight+1; [/code]
死锁场景二:记载锁、间隙锁循环等待:在并发插入、更新同一条数据时,一个事故获取了记载锁,一个事故在等待记载排他锁,则事故在实行插入获取间隙锁是会造成死锁。 [code]# 事故一 # 第一步实行 begin; insert into song_rank(songId,weight) values(17,100) on duplicate key update weight=weight+1; # 第四步实行 rollback; # 事故二 # 第二步实行 begin; insert into song_rank(songId,weight) values(17,100) on duplicate key update weight=weight+1; # 事故三 # 第三步实行 begin; insert into song_rank(songId,weight) values(17,100) on duplicate key update weight=weight+1; # 出现死锁 [/code]
制止死锁控制并发写入和更新; 到此这篇关于Mysql5.7并发插入死锁题目解决的文章就先容到这了,更多相关Mysql5.7并发插入死锁内容请搜索脚本之家从前的文章或继续浏览下面的相关文章渴望大家以后多多支持脚本之家! 来源:https://www.jb51.net/database/3271232ap.htm 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
|手机版|小黑屋|梦想之都-俊月星空
( 粤ICP备18056059号 )|网站地图
GMT+8, 2025-7-1 21:09 , Processed in 0.030556 second(s), 18 queries .
Powered by Mxzdjyxk! X3.5
© 2001-2025 Discuz! Team.