如果同时有多个进程,我如何处理mysql插入?

时间:2012-02-20 18:49:42

标签: php mysql

我正在尝试制作一个简单的购物车。通常,如果产品数量为0,立即购买按钮将消失并显示缺货文本。

假设当前产品剩余1个数量,同时有两个买家购买该产品。两个买家已经在结帐页面中哪个脚本不再计算可用数量。

在这种情况下,我该如何验证这部分?我希望在首次服务的过程基础上,谁首先插入MySQL将获得产品,如果没有,脚本将返回到产品页面。

让我知道..

4 个答案:

答案 0 :(得分:3)

简单,因此可能是最佳解决方案 - 使用相同的脚本检查插入页面上的项目是否缺货。如果该商品缺货,请显示错误消息。如果它没有缺货,那就让他们买吧。

您只需要再次添加相同的选择。

或者,根据您的架构,在销售后更新数量时,请在更新查询中添加where子句:WHERE the qty> =购买的数量。然后,查看受影响的行数。如果受影响的行数为0,那么您就知道销售没有通过。显示缺货错误消息。

或者,可能是不受欢迎的解决方案 - 锁定页面。当第一个用户转到该页面时,您会在表中插入一行,以跟踪哪些页面上的人员,并阻止其他用户访问该页面。然后,当第二个用户转到该页面时,他们会收到一条错误消息。然后,当第一个用户完成事务时,您确保与锁定页面的人员相同的会话ID是谁现在正在完成事务。

答案 1 :(得分:1)

在处理之前,您只需要检查以确保它仍然有库存。也许在事务开始时锁定表,直到您完成运行与该事务关联的所有脚本,以便一次只能进行一次购买。

答案 2 :(得分:1)

你可以进行锁定,但可能导致一些问题 - 首先是扩展挑战;第二,你将锁定其他用户。

研究表明,人们搜索和添加商品的次数比他们实际购买的次数多很多倍。因此,通常不建议在放入购物车后将产品锁放在产品上。

@phpmeh给出了一个很好的答案。

答案 3 :(得分:0)

您可能希望在创建报价时保留数量(在将产品添加到购物车时执行此操作)。