很抱歉,问题有误,已在回答做出说明
出现的情景是这样的,有一个脚本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
我来自己回答了,算是个乌龙吧。。
提问中没有发现两个问题影响了分析:
1.对表的操作不仅是insert 还有update,使用的是insert ... on duplicate update ..
2.不能从锁表的角度来考虑(并不是考虑一种更严格的情况就是对的,反而死锁往往都是细粒度的造成)
出现的场景是:
总之,用事务得多想想场景,然后尽量精简一点