MySQL-Transaktions-Tutorial Yii2.0 Händler-Auszahlungsfunktion

MySQL-Transaktions-Tutorial Yii2.0 Händler-Auszahlungsfunktion

Vorwort

Ich bin ein PHP-Programmierer, der als Programmierer angefangen hat. Abgesehen von der Zeit, die ich in Schulungen verbracht habe, schreibe ich seit zwei Jahren Code. Wahrscheinlich aus beruflichen Gründen habe ich in den letzten zwei Jahren keine MySQL-Transaktionen verwendet. Erst gestern gab es ein Geschäft mit Alipay-Überweisungen, das mit MySQL-Transaktionen abgewickelt werden musste. Nach vielen Erklärungen von anderen verstand ich immer noch nicht, was MySQL-Transaktionen sind. Also begann ich eine neue Runde Nachhilfeunterricht. Wenn Sie es in dieser Welt schaffen wollen, müssen Sie das Wissen zurückzahlen, das Sie schulden.

Lassen Sie mich zunächst kurz über das Geschäft sprechen, auf das ich gestern gestoßen bin. Ich möchte ein Alipay-Abhebungsgeschäft auf dem mobilen Terminal starten. Ich habe dieses Geschäft in drei Schritten geschrieben:

Erster Schritt:

Für die Auszahlung muss ich zunächst einen Auszahlungsdatensatz in die Auszahlungstabelle schreiben und dann die Benutzersaldotabelle aktualisieren. Diese beiden Datensätze sind beide Datensätze vor der Auszahlung, was bedeutet, dass ihr Status in Bearbeitung ist.

Schritt 2:

Fordern Sie dann die Drittanbieterschnittstelle von Alipay an.

Schritt 3:

Wenn die Schnittstellenanforderung erfolgreich ist und der Benutzer das von Alipay gezahlte Geld erhalten hat, aktualisieren wir den Status der Auszahlungsdatensatztabelle und die Daten der Benutzerguthabentabelle.

Wenn die Schnittstellenanforderung fehlschlägt und der Benutzer das von Alipay an den Benutzer überwiesene Geld nicht erhält, wird der Status der Auszahlungsdatensatztabelle auf „Auszahlungsfehler“ gesetzt.

Wenn der Benutzer jedoch eine Auszahlung einleitet, wurde das Geschäft des Benutzers vor der Auszahlung ausgeführt, aber die Anforderung der Alipay-Schnittstelle eines Drittanbieters schlägt fehl und es kommt zu diesem Zeitpunkt zu einem plötzlichen Stromausfall. Der Datenbankstatus kann nicht geändert werden und das Ergebnis entspricht nicht unseren Erwartungen. Derzeit zeigen MySQL-Transaktionen ihren Wert in dieser Art von Geschäft.

MySQL-Transaktion: Eine Reihe von auszuführenden Vorgängen wird als Transaktion bezeichnet. Die Transaktionsverwaltung dient dazu, diese Vorgänge so zu verwalten, dass sie entweder vollständig ausgeführt werden oder überhaupt nicht. Das heißt, die oben beschriebenen Auszahlungsvorgänge müssen entweder erfolgreich oder nicht erfolgreich ausgeführt werden, und es darf keine halb ausgeführten Situationen geben. Der Zweck von MySQL-Transaktionen besteht darin, die Datenintegrität sicherzustellen. Allerdings unterstützen nicht alle Daten-Engines in MySQL die Transaktionsverwaltung, nur InnoDB unterstützt die Transaktionsverwaltung.

Funktionen zur Transaktionsverwaltung:

1. Atomarität: Der gesamte Vorgang einer Transaktion ist ein Ganzes und kann nicht aufgeteilt werden. Entweder ist alles erfolgreich oder alles schlägt fehl.

2. Konsistenz: Die Daten in der Datentabelle ändern sich vor und nach dem Transaktionsvorgang nicht.

3. Isolation: Transaktionsvorgänge sind voneinander isoliert und werden nicht beeinträchtigt.

4. Persistenz: Sobald die Daten übermittelt wurden, können sie nicht mehr geändert werden und die Daten der Datentabelle werden dauerhaft geändert.

Transaktionsverwaltungsvorgänge:

Transaktionsmanagement aktivieren: Nach der Aktivierung werden folgende SQL-Anweisungen nicht sofort ausgeführt und die Ergebnisse nicht in die Tabelle, sondern in das Transaktionsprotokoll geschrieben.

Transaktion starten;

Rollback-Vorgang: Durch Rollback wird der Inhalt gelöscht, der nach dem Start der Transaktionsverwaltung in das Transaktionsprotokoll geschrieben wurde, d. h. der Zustand vor dem Start der Transaktionsverwaltung wird wiederhergestellt.

Syntax: Rollback;

Hinweis: Der Rollback-Vorgang führt nur ein Rollback des „geschriebenen“ Inhalts durch und kann die normale Lese- und Auswahlanweisung der Tabelle nicht zurücksetzen.

Transaktions-Commit: Schreiben Sie die Ergebnisse der SQL-Anweisung in die Datentabelle.

Syntax: commit;

Beispielcode:

/***
 * Hinweise: Händler können Bargeld von Alipay abheben * @Autor: Dang Mengmeng
 * @Datum: 2019/7/9 0009 10:01
 * @param $params
 * @return gemischt
 * @throws BadRequestHttpException
 */
öffentliche Funktion storeWith($params){
 versuchen{
 $Zahlungsempfängerkonto = $params['Zahlungsempfängerkonto'];
 $Betrag = $params['Betrag_des_Zugangs'];
 $request = neue AlipayFundTransToaccountTransferRequest();
 $Verbindung = Yii::$app->db;
 $transaction = $connection->beginTransaction(); //Transaktion starten //Auszahlungsdatensatz schreiben $RES = StoreWith::updateWithData($x_id);
 $financeId = StoreWith::insertLog($params);
 $params['acc_id'] = $financeId;
 : $paymentId = StoreWith::insertPaymentLog($params);
 $request->setBizContent("{" .
  "\"out_biz_no\":$Bestell-ID," .
  "\"Zahlungsempfängertyp\":\"ALIPAY_LOGONID\"," .
  "\"Zahlungsempfängerkonto\":$Zahlungsempfängerkonto," .
  "\"Betrag\": $Betrag," .
  "\"Bemerkung\":\"Gewinnentnahme\"" .
  " }");
 $ergebnis = $aop->execute($request);
 $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";
 $resultCode = $result->$responseNode->code;
 wenn(!empty($resultCode) && $resultCode == 10000){
  //Auszahlung erfolgreich $status = 1;
  //1. Aktualisieren Sie den Status der Daten zu eingezahlten Geldmitteln. StoreWith::updateWithDataTwo($x_id,$status);
 } anders {
  //Auszahlung fehlgeschlagen $status = 2;
  StoreWith::updateWithDataTwo($x_id,$status);
 }
 wenn($resultCode == 10000){
  $transaction->commit(); //Transaktions-Commit}else{
  $transaction->rollBack(); //Ausführung fehlgeschlagen, Transaktions-Rollback}
 gibt $resultCode zurück;
 }fang (\Ausnahme $Ausnahme){
 wirf eine neue BadRequestHttpException($exception->getMessage());
 }
}

Die Wissensschuld, die Sie haben, muss immer zurückgezahlt werden. Es ist besser, dies früh als spät zu wissen! ! !

Es ist besser, früh als spät zu lernen, deshalb werde ich Ihnen so schnell wie möglich ein Lied geben. Hahaha! ! !

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Originallink: https://www.cnblogs.com/honely/p/11156929.html

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung langer Transaktionsbeispiele in MySQL
  • Detaillierte Erklärung von MySQL-Transaktionen und MySQL-Protokollen
  • Detaillierte Erläuterung des Implementierungsprinzips von MySQL-Transaktionen und Spring-Isolationsebenen
  • Ausführliche Erläuterung der Konzepte und Verwendung von MySQL-Transaktionen
  • Detaillierte Erläuterung der MySQL-Transaktionsverwaltungsvorgänge
  • Beispiel zum Anzeigen und Ändern der MySQL-Transaktionsisolationsebene
  • Beispielanalyse für MySQL-Transaktionen, Isolationsebenen und Sperrenverwendung
  • Detailliertes Beispiel zur Implementierung von Transaktions-Commit und -Rollback in MySQL
  • So finden Sie Informationen zu nicht festgeschriebenen Transaktionen in MySQL
  • Detaillierte Erläuterung des Implementierungsprinzips von ACID-Transaktionen in MySQL
  • Beispiel für eine MySQL-Datenbank-übergreifende Transaktions-XA-Operation
  • Tiefgreifendes Verständnis langer MySQL-Transaktionen

<<:  Implementierungscode für die bidirektionale Kommunikation zwischen Node und Python

>>:  Verschiedene Möglichkeiten der Ausführung im Hintergrund von Linux (Zusammenfassung)

Artikel empfehlen

Verwenden von Apache ab zum Durchführen von HTTP-Leistungstests

Mac wird mit Apache-Umgebung geliefert Öffnen Sie...

(MariaDB) Umfassende Erklärung der MySQL-Datentypen und Speichermechanismen

1.1 Übersicht über Datentypen Der Datentyp ist ei...

Zusammenfassung gängiger MySQL-DDL-Operationen

Bibliotheksverwaltung Erstellen einer Bibliothek ...

MySQL Workbench herunterladen und verwenden Tutorial detaillierte Erklärung

1. MySQL Workbench herunterladen Workbench ist ei...

Linux-Installation, MongoDB-Start und Lösung allgemeiner Probleme

MongoDB-Installationsprozess und Problemaufzeichn...

20 JavaScript-Tipps zur Verbesserung der Entwicklungseffizienz

Inhaltsverzeichnis 1. Arrays deklarieren und init...

Rastersysteme im Webdesign

Bildung des Gittersystems Im Jahr 1692 war der fr...

Detaillierte Erläuterung der drei Möglichkeiten zum Importieren von CSS-Dateien

Es gibt drei Möglichkeiten, CSS einzuführen: Inli...

Detaillierte Erklärung gängiger Docker-Befehle

1. Hilfe-Befehl 1. Aktuelle Docker-Version anzeig...

Detaillierte Erläuterung des Vue-Router-Routings

Inhaltsverzeichnis 1. Grundlegende Verwendung 2. ...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.24

In diesem Artikel finden Sie das Installations- u...