我目前正在为我的客户构建一个 PHP 电子商务网站。它进展顺利,但我遇到了障碍,想知道是否有任何 MySQL/PHP 专家可以帮助我。基本上,电子商务网站只销售一次产品(意味着每件商品只有一个数量的库存),这意味着一旦客户签出该商品,就无法再购买。
所以在结帐时,我必须检查产品是否仍有库存。假设这将是一个流量很大的网站,可能会有两个或多个客户同时尝试结账的情况,因此他们都可以购买产品。所以为了防止这种情况,我的计划如下:
- 在产品上选择...FOR UPDATE,以锁定表行。
- 进行电子商务交易(Paypal、authorize.net 等)
- 电商交易成功,调用MySQL存储过程(也有SQL交易)来存储订单信息等,失败则回滚
这个计划有可能实现吗?要执行 SELECT...FOR UPDATE,我必须启动一个 SQL 事务,但随后我还要在 MySQL 存储过程的第 3 步中启动另一个事务。我不确定会发生什么。另外,这个计划会导致僵局吗?
抱歉,问题很长,但感谢您的帮助!