一个接口有如下操作
大家在 1 步骤的时候会用 for update 锁行或者锁多行吗,还是说在一些并发高并且涉及到金钱才会加锁呢
1
jtwor 2022-01-14 15:37:16 +08:00
不用 for update 排他锁,用行锁,多数是锁用户金额字段的主表吧
|
2
MakHoCheung OP @jtwor 就是涉及金额的才锁的吗,一般业务锁不锁
|
3
Chad0000 2022-01-14 16:28:40 +08:00 via iPhone
乐观锁就行:加上版本号。未命中表示有人已经更新,重新查询再试
update table set value =@newValue, version=2 where id=@id and version=1 |
4
MakHoCheung OP @Chad0000 然后根据更新行数不是 1 重试是吧,懂了
|
5
jtwor 2022-01-14 16:45:03 +08:00
@MakHoCheung
例如用户表有一个钱包总金额字段,这时候用行锁,锁住这个用户,这样能防止其他事务去修改总金额。 锁很大程度是因为业务有顺序要求,让他们排队,金额库存扣减这些就是了。 乐观锁除了 3L 的,还能能避免那种超卖多扣 update table set value=value-@count where value-@count>=0 |