以下是我的情况
我有名为
的表Products
id | name | count | Price
-------------------------
1 | meat | 1 | 10
Users
id | name | balance
-----------------
1 | Tim | 10
2 | Joe | 10
工作流程
如果计数> = 1,请选择产品。
减少用户的余额并计数=计数-1
如果no_balance或count <1抛出错误
如果两个用户都在同一时间下订单订购一个产品,则产品表计数更新为-1,这意味着对两个用户都执行了查询。
产品
id | name | count | Price
-------------------------
1 | meat | -1 | 10
下订单时,我已使用以下查询选择匹配的产品
Select * from products where count >= 1 and price >= 10
此外,如果用户下的订单时差很小,那么预期的输出就会聚集。
对此有什么解决办法吗?
答案 0 :(得分:0)
例如,您应该考虑对每行使用lock
。
从数量大于等于1且价格大于等于10的产品中选择*以进行更新。
但是在您的情况下,我建议您使用Redis
来做到这一点。