ホームページ バックエンド開発 PHPチュートリアル PHP-MYSQL は、物を購入するときにお金を差し引くプロセスをどのように実装していますか (詳細については多くの質問があります)

PHP-MYSQL は、物を購入するときにお金を差し引くプロセスをどのように実装していますか (詳細については多くの質問があります)

Jun 13, 2016 pm 12:24 PM
nbsp php select sql update

PHP-MYSQL は購入代金を差し引くプロセス (詳細はたくさんあります) をどのように実装しますか?
ユーザーが「キャンディー」などの仮想商品と交換するために自分のお金の残高とユーザーが所有する「キャンディー」の数を別のテーブルに記録するとします。これはユーザーのお金を差し引くと同時に、ユーザーの仮想アイテムリストの「砂糖」の数が1になります。ユーザーの「キャンディー」の数の上限は 99 個であると仮定します。

まず、私の現在の考えについて話させてください:

* まず、ユーザー アカウントの残高を照会するために選択します。 (SQL ステートメント 1)
* お金の残高と 1 個の「砂糖」の価格を比較し、残高が十分であれば続行します (PHP ロジックの実装)
* トランザクションが開始します
* お金の残高を減算して更新します「砂糖」1個の値段。ここで疑問 A が生じます。「砂糖」の価格を差し引いた残高に直接更新する必要がありますか (つまり、PHP が最初に残高を計算します)、それとも MYSQL にフィールドの減算を行わせる必要がありますか? (SQL ステートメント 2)
* ユーザーの 'sugar' の数を選択します (SQL ステートメント 3)
* 前の選択の結果がなかった場合は、ユーザーの 'sugar' のレコードとその数値を挿入します。今回購入した「砂糖」の「番号」です。ユーザーの「砂糖」レコードがある場合は、「砂糖」の番号を更新してそれに 1 を加えます。ここで問題 B が発生します。単一ユーザーの「sugar」数の上限は 99 であるため、PHP ロジックを使用して、1 の後の「sugar」数が上限の 99 を超えているかどうかを判断する必要があります。 SQL ステートメント 1 と 3 には「更新用」ロック テーブルがありません。質問 A と組み合わせると、ユーザーが「キャンディ」を購入する 2 つのリクエストを同時に送信すると、実際には「キャンディ」の数が超過する可能性があります。上限は 99 (たとえば、100 に達します)
*最後のトランザクションが送信されます

したがって、最後の質問が 2 つあります:
C: 交換で 1 つのリソースを消費するこのロジックと同様別のリソースについては、特定の数のリソースを選択するときに「更新用に選択」する必要があります。ロックしますか? (最初に選択しないと、お金が足りているか、砂糖の量が制限を超えているかなどの論理的な判断ができなくなります。選択後に更新すると、選択したデータが崩れる恐れがあります)
D: 上記のプロセスを簡略化する方法はありますか?

あるいは、この問題について詳しい記事があれば、シェアしていただければ幸いです。
------ソリューションのアイデア----------------------
これは、次のことを確実にするために必須です。トランザクションを使用して、失敗してロールバックしてから、正常に送信します
------解決策のアイデア------ -
トランザクション処理を使用する必要があります。
------解決策のアイデア----------------------
最初にトランザクションを設定し、次にトランザクションを選択しますfor update は現在の在庫を取り出し、十分であればログ テーブルにレコードを挿入し、次に在庫を更新して控除を完了し、最後にトランザクションを解放します。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

See all articles