- 博客(2)
- 收藏
- 关注
原创 【Mysql】执行select ... where ... for update语句会发生的事情(锁、死锁等)
1、当我们执行以上的insert插入语句时,会在插入间隙上获取"插入意向锁",而"插入意向锁"与"间隙锁"是冲突的,所以当其它事务持有该间隙的间隙锁时,需要等待其它事务释放间隙锁之后,才能获取到插入意向锁。2、案例中的事务 A 和事务 B 在执行完后 select ... for update 语句后都持有范围为(1006,+∞]的next-key 锁,而接下来的插入操作为了获取到插入意向锁,都在等待对方事务的间隙锁释放,于是就造成了循环等待,导致死锁。如果where的后面条件列没加索引,则会锁全表;
2023-09-07 21:44:25 579 1
原创 执行select ... where ... for update语句遇到的情况
1、当我们执行以上的insert插入语句时,会在插入间隙上获取"插入意向锁",而"插入意向锁"与"间隙锁"是冲突的,所以当其它事务持有该间隙的间隙锁时,需要等待其它事务释放间隙锁之后,才能获取到插入意向锁。2、案例中的事务 A 和事务 B 在执行完后 select ... for update 语句后都持有范围为(1006,+∞]的next-key 锁,而接下来的插入操作为了获取到插入意向锁,都在等待对方事务的间隙锁释放,于是就造成了循环等待,导致死锁。如果where的后面条件列没加索引,则会锁全表;
2023-09-07 21:39:17 142 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人