最近业务偶现并发问题. 举个例子:

-- 行锁
select * from `table` where id = 123 and a = 2 for update;

上面看似行锁 , 实际上使用 for update 需要配合索引去使用, 行锁/区间锁 都需要基于索引上锁.

table表仅 配置了 a 字段的索引, 所以上面的sql是区间锁.

解决问题就需要基于 where 条件设置索引.