seata update 间隙锁场景 问题考虑
a 表数据 status 1,3 5
事务1
1.select * from a where status < 6 for update (RC模式锁不住)(事务2,insert 一条数据进来
2.update a where status < 5
3.根据步骤1生成主键回滚日志
4.异常回滚,回滚了1,3,5.(2没有回滚)
事务2
insert into a(status) values(2)
解决:
1.当不RR模式下。把before获取得pk,作为修改条件去替换update得where条件。
2.全局排他锁提前(应用实现间隙锁)