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:
|
<<: Implementierungscode für die bidirektionale Kommunikation zwischen Node und Python
>>: Verschiedene Möglichkeiten der Ausführung im Hintergrund von Linux (Zusammenfassung)
Mac wird mit Apache-Umgebung geliefert Öffnen Sie...
Vorwort Bei der Arbeit müssen wir häufig in einer...
1.1 Übersicht über Datentypen Der Datentyp ist ei...
Bibliotheksverwaltung Erstellen einer Bibliothek ...
In diesem Artikelbeispiel wird der spezifische Co...
1. MySQL Workbench herunterladen Workbench ist ei...
MongoDB-Installationsprozess und Problemaufzeichn...
Inhaltsverzeichnis 1. Arrays deklarieren und init...
Nginx unterstützt drei Möglichkeiten zum Konfigur...
Bildung des Gittersystems Im Jahr 1692 war der fr...
Es gibt drei Möglichkeiten, CSS einzuführen: Inli...
1. Hilfe-Befehl 1. Aktuelle Docker-Version anzeig...
Inhaltsverzeichnis 1. Grundlegende Verwendung 2. ...
In diesem Artikel finden Sie das Installations- u...
Der Vorteil der Master-Slave-Synchronisierungskon...