mysql 间隙锁的死锁

RR隔离级别下,间隙锁会触发死锁,比如

事务A:

select * from table where id = 5 for update;

insert into table (id) values (5)

事务B同样

那么在并发执行的时候,由于间隙锁之间不互斥,假设 id为5不存在,那么事务A、事务B都拿到同样的gap锁, 在insert的时候互相等待对方的gap锁,导致死锁

Written on February 17, 2022