我处理 Mysql 同时购买的方式是否正确?

My way to handle purchases made at the same time in Mysql is correct?

我知道 Mysql 中的单个查询是以原子方式执行的(默认启用自动提交模式) 但是看看这个查询:

Update products set Amount = Amount-1 Where Amount>0 AND ID_PRODUCT = 5;

但是并发呢?即多个用户可以在同一时间执行相同的查询。例如,当可用性为 1 时,2 个用户购买相同的产品。当他们购买产品时,有一个,但在后端执行查询时,另一个用户已经购买了该产品,因此条件 Amount>0 不是满意并且未应用更新。我想知道这个模型对我的应用程序是否可靠且安全? 或者我必须使用锁或类似的东西?

这个声明是原子的。它可以 运行 不止一次,甚至同时发生,但您需要密切注意结果以查看是否有任何行被修改。

在运行缺货的情况下,你会得到一个结果,表明没有行被修改,或者换句话说,由于这种情况,它无法减去库存。

有些系统更喜欢将库存从这样的库存 table 移动到另一个“订单”table,就像分类帐一样,因此您可以确定您没有减去库存如果购买不当,它就会丢失。如果有人放弃订单、发出 return 等 return 等,分类帐可以轻松解除和 return 库存