【问题不成立】mysql 多个进程下连续的多个insert为什么会出现死锁
很抱歉,问题有误,已在回答做出说明
出现的情景是这样的,有一个脚本task,开启了多个进程
这些进程会同时操作多个表(对这些表的操作都只有insert,但是对于一个表可能insert多次),从操作第一个表开始就开启一个事务,操作完最后一个表后提交事务,比如
table1
table2
table3
table4
操作这些表的顺序是一定的,只能从上到下,但是操作的数目不确定(比如进程1操作1、4,进程2操作2、4)
使用的存储引擎是innodb
mysql报错信息是
Deadlock found when trying to get lock; try restarting transactionin
错误号1213
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我来自己回答了,算是个乌龙吧。。
提问中没有发现两个问题影响了分析:
1.对表的操作不仅是insert 还有update,使用的是insert ... on duplicate update ..
2.不能从锁表的角度来考虑(并不是考虑一种更严格的情况就是对的,反而死锁往往都是细粒度的造成)
出现的场景是:
总之,用事务得多想想场景,然后尽量精简一点