我处理 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 库存
我知道 Mysql 中的单个查询是以原子方式执行的(默认启用自动提交模式) 但是看看这个查询:
Update products set Amount = Amount-1 Where Amount>0 AND ID_PRODUCT = 5;
但是并发呢?即多个用户可以在同一时间执行相同的查询。例如,当可用性为 1 时,2 个用户购买相同的产品。当他们购买产品时,有一个,但在后端执行查询时,另一个用户已经购买了该产品,因此条件 Amount>0
不是满意并且未应用更新。我想知道这个模型对我的应用程序是否可靠且安全?
或者我必须使用锁或类似的东西?
这个声明是原子的。它可以 运行 不止一次,甚至同时发生,但您需要密切注意结果以查看是否有任何行被修改。
在运行缺货的情况下,你会得到一个结果,表明没有行被修改,或者换句话说,由于这种情况,它无法减去库存。
有些系统更喜欢将库存从这样的库存 table 移动到另一个“订单”table,就像分类帐一样,因此您可以确定您没有减去库存如果购买不当,它就会丢失。如果有人放弃订单、发出 return 等 return 等,分类帐可以轻松解除和 return 库存