1、常规死锁的原因是双方互相持有对方的锁,无法释放。
问题是对于同一张表中的两个数据
事务1开始执行step-1,对id=1的数据加排他锁(X锁)。
事务2开始执行步骤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执行步骤2,出现和上面步骤1同样的情况,持有表B上的共享锁。
事务1执行步骤-3,执行id=1的数据,发现这条数据有事务2的共享锁,于是进入等待状态
事务2执行step-4,执行id=1的数据,发现这条数据有事务1的共享锁,于是进入相互等待状态。
发生死锁
扫一扫在手机端查看
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。