現在、クライアント用の PHP e コマース Web サイトを構築しています。順調に進んでいますが、障害にぶつかり、MySQL/PHP の専門家が助けてくれるかどうか疑問に思っていました。基本的に、e コマース サイトは商品を 1 回だけ販売します (つまり、商品ごとに 1 つの数量しか在庫がありません)。つまり、顧客がその商品をチェックアウトすると、それ以上購入することはできません。
そのため、チェックアウト時に、商品がまだ在庫があるかどうかを確認する必要があります。これがトラフィックの多いサイトであると仮定すると、2 人以上の顧客が同時にチェックアウトしようとする場合があり、両方が製品を購入できる可能性があります。それを防ぐために、私の計画は次のとおりです。
- テーブルの行をロックするには、製品で [...FOR UPDATE] を選択します。
- 電子商取引を行う (Paypal、authorize.net など)
- e コマース トランザクションが成功した場合は、MySQL ストアド プロシージャ (SQL トランザクションも持つ) を呼び出して、注文情報などを保存します。または、失敗した場合はロールバックします。
この計画を実現することは可能ですか?SELECT...FOR UPDATE を実行するには、SQL トランザクションを開始する必要がありますが、その後、MySQL ストアド プロシージャ内のステップ 3 で別のトランザクションも開始しています。何が起こるかわかりません。また、この計画は行き詰まりのシナリオにつながりますか?
長い質問で申し訳ありませんが、助けていただければ幸いです。