- 多个事务并发执行时因争夺资源而造成互相等待
- 相反顺序加锁
- 外键和触发器等隐式给子表加锁
- S 锁和 X 锁冲突
- 已经获取 gap 锁后,尝试获取插入意向锁造成等待
- 可串行化中,查询自动加 S 锁
- 可重复读中,查询可以手动加 S 锁
- 查询中,使用 for update 加 X 锁
- 删除或更新自动加 X 锁
- 可重复读中,范围操作或未命中加 gap 锁,避免幻读
- 插入时的特殊锁,插入后马上释放
- 插入意图锁是一种间隙锁,在执行插入之前设置
- 插入意向锁只会和间隙锁或者 Next-key 锁冲突
- 修改 SQL,调整加锁顺序
- 降低隔离级别
- 添加合理的索引,不走索引会全表加锁
- 避免大事务
- 避免同一个时间点执行多个操作同一表的事务