选择查询在并行执行时执行错误的结果

时间:2018-07-13 07:50:21

标签: mysql

以下是我的情况

我有名为

的表
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

此外,如果用户下的订单时差很小,那么预期的输出就会聚集。

对此有什么解决办法吗?

1 个答案:

答案 0 :(得分:0)

例如,您应该考虑对每行使用lock

从数量大于等于1且价格大于等于10的产品中选择*以进行更新。

但是在您的情况下,我建议您使用Redis来做到这一点。

How to design a second kill system for online shop