用动态的观点来看待加锁,插入删除更新操作都会导致死锁发生。
加锁规则
不等号等值查询:虽然里面没有等号,但判断大于小于还是要用到等值查询确定范围。
begin;
select * from t where id>9 and id<12 order by id desc for update;
做等值查询出现死锁
begin;
select id from t where c in(5,20,10) lock in share mode;
锁5,10,20
select id from t where c in(5,20,10) order by c desc for update;
因为有 order by c desc ,先锁20,10,5 两条语句锁相同的资源,加锁顺序相反,并发执行时,可能出现死锁。