出现的场景
原因分析
出现的场景
原因分析
举例说明
在以下结构中,value字段存在唯一索引
----------------------
id value
----------------------
1 1
3 3
5 5
----------------------
事务A
// step1 执行到此处时,由于value=3已存在,此时会对(1,3]加临键锁insert into table(value) values(3) on duplicate key update value = 7; // step3 执行到此处时,由于3~5的区间已被锁住,需要等待事务2释放临键锁insert into table(value) values(4) on duplicate key update value = 7;
事务B
// step2 执行到此处时,由于value=5已存在,此时会对(3,5]加临键锁insert into table(value) values(5) on duplicate key update value = 8; // step4 执行到此处时,由于1~3的区间已被锁住,需要等待事务1释放临键锁insert into table(value) values(2) on duplicate key update value = 8;
当执行顺序按照step1~step4执行时,便会形成死锁
