大家好,欢迎来到IT知识分享网。
1,常规死锁的原因是相互持有对方的锁,不能释放导致的
问题是,针对同一张表的两条数据

事务1先开启执行step-1, 对id=1这条数据加排他锁(X锁),
事务2开启 执行step-2,对id=2这条纪录加排他锁(X锁)
事务1执行step-3,此时事务2已经持有id=2的排他锁,所以step-3处于等待状态
事务2 执行step-4,发现事务1已经持有id=1的锁,导致互相等待
报死锁
2,特例死锁:两张表修改同一条数据并且存在外键关联,出现死锁

B表为主表,A表持有B表主键,存在外键关联的情况,如果数据发生变化:增删改情况,mysql都会默认的先去主表查询数据并且增加共享锁,防止当前修改的数据发生
出现死锁的过程:
事务1执行step-1,条件为b_id=1,因为存在外键关联,在修改这条数据的时候,mysql会去主表B查询外键数据,并且默认给B表的id=1的这条数据加共享锁。
事务2执行step-2,同样会发生上面的step-1的情况持有B表的共享锁
事务1执行step-3,执行id=1的数据,发现这条数据有事务2的共享锁,然后进入等待状态
事务2执行step-4,执行id=1的数据,发现这条数据有事务1的共享锁,然后进入相互等待
出现死锁
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/169555.html