序文 私はプログラマーとしてスタートした PHP プログラマーです。これまで、トレーニング コースで勉強した時間を除いて、2 年間コードを書いてきました。おそらく仕事上の理由から、私は過去 2 年間 MySQL トランザクションを使用していません。昨日、MySQL トランザクションを使用して完了する必要のある Alipay 送金に関する業務がありました。他の人から何度も説明を受けた後でも、MySQL トランザクションが何であるかまだ理解できませんでした。そのため、新しい補習授業を始めました。この世界で成功したいのであれば、借りた知識を返さなければなりません。 まず、昨日私が遭遇したビジネスについて簡単にお話しします。モバイル端末でAlipayの引き出しビジネスを開始したいと考えています。このビジネスを3つのステップで書きました。 最初のステップ: まず、出金の場合、出金テーブルに出金レコードを書き込み、次にユーザー残高テーブルを更新する必要があります。これら 2 つのデータ レコードはどちらも出金前のレコードであり、ステータスが処理中であることを意味します。 ステップ2: 次に、Alipay のサードパーティ インターフェースをリクエストします。 ステップ3: インターフェースリクエストが成功し、ユーザーがAlipayで支払った金額を受け取った場合、出金記録テーブルのステータスとユーザー残高テーブルのデータが更新されます。 インターフェース要求が失敗し、ユーザーが Alipay から送金されたお金を受け取らなかった場合、出金記録テーブルのステータスは出金失敗になります。 しかし、ユーザーが引き出しを開始すると、ユーザーの引き出し前業務はすでに実行されていますが、サードパーティの Alipay インターフェース要求が失敗し、この時点で突然の停電が発生し、データベースの状態を変更できず、結果が期待どおりになりません。現時点では、MySQL トランザクションはこの種のビジネスにおいてその価値を発揮します。 MySQL トランザクション: 実行される一連の操作はトランザクションと呼ばれ、トランザクション管理はこれらの操作が完全に実行されるか、まったく実行されないかを管理することです。つまり、上記の引き出し業務は正常に実行されるか、失敗に終わるかのどちらかであり、半分しか実行されない状況は発生しません。 MySQL トランザクションの目的は、データの整合性を確保することです。ただし、MySQL のすべてのデータ エンジンがトランザクション管理をサポートしているわけではなく、InnoDB のみがトランザクション管理をサポートしています。 トランザクション管理機能: 1. 原子性: トランザクションの操作全体が 1 つのまとまりであり、分割できません。すべてが成功するか、すべてが失敗します。 2. 一貫性: データ テーブル内のデータは、トランザクション操作の前後で変更されません。 3. 分離: トランザクション操作は互いに分離されており、影響を受けません。 4. 永続性: データが送信されると変更できなくなり、データ テーブルのデータは永続的に変更されます。 トランザクション管理操作: トランザクション管理を有効にする: 有効にすると、次の SQL ステートメントはすぐに実行されず、結果はテーブルに書き込まれませんが、トランザクション ログに書き込まれます。 トランザクションを開始します。 ロールバック操作: ロールバックは、トランザクション管理の開始後にトランザクション ログに書き込まれた内容をクリアし、トランザクション管理を開始する前の状態に復元します。 構文: rollback; 注意:ロールバック操作では、「書き込まれた」コンテンツのみがロールバックされ、通常のテーブル読み取り選択ステートメントはロールバックできません。 トランザクションのコミット: SQL ステートメントの結果をデータ テーブルに書き込みます。 構文: commit; サンプルコード: /*** * 注: 加盟店は Alipay から現金を引き出すことができます。* @著者: Dang Mengmeng * @日付: 2019/7/9 0009 10:01 * @param $params * @return 混合 * @throws BadRequestHttpException */ パブリック関数 storeWith($params){ 試す{ $支払先アカウント = $params['支払アカウント']; $amount = $params['amount_of_acc']; $request = 新しい AlipayFundTransToaccountTransferRequest(); $connection = Yii::$app->db; $transaction = $connection->beginTransaction(); //トランザクションを開始 //引き出し記録を書き込む $RES = StoreWith::updateWithData($x_id); $financeId = StoreWith::insertLog($params); $params['acc_id'] = $financeId; $paymentId = StoreWith::insertPaymentLog($params); $request->setBizContent("{" . "\"out_biz_no\":$orderId," . 「\"payee_type\":\"ALIPAY_LOGONID\"," . "\"payee_account\":$payee_account," . 「\"金額\":$金額」。 「\"備考\":\"利益引き出し\"」。 " }"); $result = $aop->execute($request); $responseNode = str_replace(".", "_", $request->getApiMethodName()). "_response"; $resultCode = $result->$responseNode->コード; if(!empty($resultCode) && $resultCode == 10000){ //引き出し成功 $status = 1; //1. 入金された資金データのステータスを更新する StoreWith::updateWithDataTwo($x_id,$status); } それ以外 { //引き出しに失敗しました $status = 2; StoreWith::updateWithDataTwo($x_id、$status); } $結果コード == 10000の場合{ $transaction->commit(); //トランザクションコミット}else{ $transaction->rollBack(); //実行に失敗しました。トランザクションはロールバックされます} $resultCode を返します。 }catch (\Exception $exception){ 新しい BadRequestHttpException をスローします($exception->getMessage()); } } あなたが負っている知識の負債は必ず返済しなければなりません。遅れるよりは早く知る方が良いのです! ! ! 遅く学ぶよりは早く学んだ方が良いので、できるだけ早く曲をお届けします。ハハハ! ! ! 要約する 以上がこの記事の全内容です。この記事の内容が皆様の勉強や仕事に何らかの参考学習価値をもたらすことを願います。123WORDPRESS.COM をご愛顧いただき、誠にありがとうございます。 オリジナルリンク: https://www.cnblogs.com/honely/p/11156929.html 以下もご興味があるかもしれません:
|
>>: Linux のバックグラウンドで実行するいくつかの方法 (まとめ)
コードをコピーコードは次のとおりです。 <div スタイル="幅:630px;高さ:...
目次特徴保存戦略自己増加の決定自動増分値の変更実行プロセス問題点自動増分ロックロック戦略バッチ挿入の...
filterは通常、特定の値をフィルターするために使用されます。たとえば、フィールドが空だが、フロン...
今日、プロジェクトのホームページにアクセスするために Tomcat を設定していたところ、404 エ...
1.タイムアウトを設定する3 秒後に abc を印刷します。一度だけ実行します。 setTimeou...
1. ダウンロードアドレス: mysql-8.0.17-winx64ダウンロードして解凍する2. フ...
この記事では、kubernetes1.5.2 から kubernetes1.10 にアップグレードす...
普段はdocker buildコマンドでイメージを生成していますが、コードの更新が頻繁に行われるとn...
MySQL は、スウェーデンの会社 MySQL AB によって開発され、現在は Oracle が所有...
ほとんどの場合、PC でファイルをアップロードするにはプラグインが使用され、フラッシュが導入されても...
MySQL はインストールが簡単で、高速で、豊富な機能を備えています。これはオープンソース運動のベン...
Ubuntu のバージョンに関係なく、MySQL データベースのインストールは基本的に同じです。具...
今日、null 値をテストしていたところ、小さな問題が見つかりました。ここに記録しました。以前にも遭...
目次設計シナリオ技術的なポイントサーバー情報準備フルバックアップスクリプト(Mysql-FullyB...
1. ボックスを中央に配置するいくつかの方法を記録します。 1.0、マージン幅固定、高さ中央配置。 ...