什么是处理多个MySQL事务的最佳实践?

时间:2014-04-18 22:35:17

标签: php mysql ajax

我正在使用PHP + mySQL开发订单系统。多个用户很有可能同时使用相同的产品创建新订单。

这就是场景:在MySQL DB中,有一个名为“inventory”的表,其中列出了所有产品的项目编号和可用数量。

现在,

产品A的库存为500件。

User1正在处理一份包含300件产品A的新订单,但他尚未提交。但是,有一个AJAX脚本可以向表“库存”发送查询,因为库存数量是500个,所以它返回300个可用于此订单的数量。

User2正在处理另一个新订单,而User1仍未提交订单。 User2需要400个产品A,而且由于没有提交来自User1的300个,因此AJAX函数返回400个可用于User2的订单。

现在问题就在于此。 User1或User2首先提交他的订单,另一个用户将没有足够的数量来履行他作为AJAX返回的结果的订单。

我想知道处理此类任务的最佳(或通常)练习是什么。

我已经考虑过PDO事务处理(不确定它是否可行,从未使用它,我是新手),或者我应该忘记AJAX但是在用户提交表单时进行查询?

此外,我曾考虑在页面上设置“检查”按钮,然后在用户输入订单后,他们点击“检查”向DB发送查询,然后获得最“更新”的数量,也许很快就会在用户点击提交之前。

感谢。

3 个答案:

答案 0 :(得分:2)

首先要了解的两件事:

  1. 没有像“PDO交易”那样的事情
  2. 无论如何,交易都不适用。
  3. 您实际需要的是简单的预订系统。或者是通知一。

    如果预订,您可以将300项标记为“已保留”。然后所有其他人可能会满足于200或者等到预订被释放或退还股票。

    虽然您可以在此网站上看到通知系统的示例:如果有用户正在处理答案,并且问题恰好关闭,则会向用户显示ajax通知,说他没有足够的物品可以保留。

答案 1 :(得分:1)

有两种方式:

1)当user1将其放入购物篮时,您保留该股票 (并处理超时/放弃的订单并将库存转回库存,以及在物品返回库存时通知用户的方式) 这意味着如果user1拥有它们,user2就无法添加它们。 (您可以从库存中物理删除该号码,或者您可以在其中添加另一列'保留' - 例如200库存和300保留)

2)当用户开始结账过程时,您进行库存检查+保留,并通知用户这些商品是否有库存而且您不必处理已放弃的订单#39; t保留了股票。

我已经开发了基于两者的电子商务系统,#1是最好的 - 作为一个用户,我想知道如果我把它们添加到我的购物篮中,那些东西都有库存

答案 2 :(得分:0)

这不是你用来进行查询的问题(尽管使用PDO仍然是good idea.)当用户最终提交订单时,你的php脚本应该执行额外的操作检查所要求的金额是否有货。如果不是,则应向用户显示产品数量不再可用的错误。

使用ajax定期检查库存,以便用户在订单中的某些内容不再可用时收到javascript通知。