Die MySQL-Transaktionsunterstützung ist nicht an den MySQL-Server selbst gebunden, sondern bezieht sich auf die Speicher-Engine. 1.MyISAM: unterstützt keine Transaktionen und wird für schreibgeschützte Programme verwendet, um die Leistung zu verbessern Eine Transaktion ist eine sequentielle Reihe von Datenbankoperationen, die ausgeführt werden, als handele es sich um eine einzelne Arbeitseinheit. Mit anderen Worten: Eine Transaktion ist erst dann abgeschlossen, wenn jede einzelne Operation innerhalb der Gruppe erfolgreich ist. Wenn eine beliebige Operation in einer Transaktion fehlschlägt, schlägt die gesamte Transaktion fehl. Merkmale der Transaktionen: Transaktionen haben die folgenden vier Standardeigenschaften, die oft mit dem Akronym ACID bezeichnet werden: Atomarität: Stellen Sie sicher, dass alle Vorgänge innerhalb einer Arbeitseinheit erfolgreich abgeschlossen werden. Andernfalls wird die Transaktion an der Fehlerstelle abgebrochen und vorherige Vorgänge werden auf den vorherigen Zustand zurückgesetzt. Konsistenz: Stellen Sie sicher, dass die Datenbank nach einer erfolgreichen Transaktion ihren Status korrekt ändert. Isolation: Macht Transaktionsvorgänge unabhängig und transparent. Dauerhaftigkeit: Sicherstellen, dass die Ergebnisse oder Auswirkungen einer festgeschriebenen Transaktion im Falle eines Systemausfalls bestehen bleiben. In MySQL werden Transaktionen mit COMMIT- oder ROLLBACK-Anweisungen begonnen und beendet. Zwischen den SQL-Befehlen, die die Anweisung beginnen und beenden, wird eine große Transaktion gebildet. COMMIT & ROLLBACK: Die beiden Schlüsselwörter Commit und Rollback werden hauptsächlich für MySQL-Transaktionen verwendet. Wenn eine erfolgreiche Transaktion abgeschlossen ist, sollten durch die Ausgabe eines COMMIT-Befehls die Änderungen an allen beteiligten Tabellen wirksam werden. Wenn ein Fehler auftritt, sollte ein ROLLBACK-Befehl ausgegeben werden, um alle in der Transaktion referenzierten Tabellen in ihren vorherigen Zustand zurückzusetzen. Sie können das Transaktionsverhalten steuern, indem Sie eine Sitzungsvariable namens AUTOCOMMIT festlegen. Wenn AUTOCOMMIT auf 1 (Standard) gesetzt ist, wird jede SQL-Anweisung (in einer Transaktion oder nicht) als vollständige Transaktion betrachtet und nach Abschluss standardmäßig festgeschrieben. Wenn AUTOCOMMIT auf 0 gesetzt ist und der Befehl SET AUTOCOMMIT = 0 ausgegeben wird, verhält sich die nachfolgende Anweisungsreihe wie eine Transaktion, bis eine explizite COMMIT-Anweisung ohne aktive Commits ausgegeben wird. Diese SQL-Befehle können in PHP mithilfe der Funktion mysql_query() ausgeführt werden. Allgemeine Transaktionsbeispiele Diese Ereignisabfolge ist unabhängig von der verwendeten Programmiersprache und kann in jeder Sprache erstellt werden, die zum Erstellen des logischen Pfads der Anwendung verwendet wird. Diese SQL-Befehle können in PHP mithilfe der Funktion mysql_query() ausgeführt werden. BEGIN WORK startet eine Transaktion und gibt einen SQL-Befehl aus Geben Sie einen oder mehrere SQL-Befehle wie SELECT, INSERT, UPDATE oder DELETE ein. Überprüfen Sie, ob Fehler vorliegen und ob alles Ihren Anforderungen entspricht. Wenn Fehler auftreten, geben Sie den Befehl ROLLBACK ein, andernfalls geben Sie den Befehl COMMIT ein. Transaktionssichere Tabellentypen in MySQL: Wenn Sie die transaktionale Programmierung von MySQL verwenden möchten, müssen Sie Tabellen auf besondere Weise erstellen. Es gibt viele Tabellentypen, die Transaktionen unterstützen, aber der beliebteste ist InnoDB. Beim Kompilieren von MySQL aus dem Quellcode erfordert die InnoDB-Tabellenunterstützung bestimmte Kompilierungsparameter. Wenn Ihre MySQL-Version keine InnoDB-Unterstützung bietet, bitten Sie Ihren Internetdienstanbieter, eine MySQL-Version zu erstellen, die den InnoDB-Tabellentyp unterstützt, oder laden Sie eine MySQL-Max-Binärdistribution für Windows oder Linux/UNIX herunter, installieren Sie sie und verwenden Sie den Tabellentyp in Ihrer Entwicklungsumgebung. Wenn Ihre MySQL-Installation InnoDB-Tabellen unterstützt, fügen Sie der Anweisung zur Tabellenerstellung einfach eine TYPE=InnoDB-Definition hinzu. Der folgende Code erstellt beispielsweise die InnoDB-Tabelle tcount_tbl: root@host#mysql -u root -p Passwort; Passwort eingeben:******* mysql> verwenden Sie TUTORIALS; Datenbank geändert mysql> Tabelle tcount_tbl erstellen -> ( -> tutorial_author varchar(40) NICHT NULL, -> Anzahl der Tutorials INT -> ) TYP=InnoDB; Abfrage OK, 0 Zeilen betroffen (0,05 Sek.) Andere GEMINI- oder BDB-Tabellentypen können verwendet werden, aber es hängt von Ihrer Installation ab, ob sie beide Typen unterstützt. Da das Projektdesign die Überweisung von Geld beinhaltet, ist eine MySQL-Transaktionsverarbeitung erforderlich, um die Richtigkeit einer Reihe von Verarbeitungsergebnissen sicherzustellen. Bei der Verwendung von Transaktionen ist es unvermeidlich, etwas Geschwindigkeit zu opfern, um die Richtigkeit der Daten sicherzustellen. Nur InnoDB unterstützt Transaktionen Atomarität, Konsistenz, Isolierung und Haltbarkeit von Transaktions-ACID 1. Atomarität von Transaktionen Eine Gruppe von Transaktionen ist entweder erfolgreich oder wird zurückgezogen. 2. Bei ungültigen Daten (z. B. Fremdschlüsseleinschränkungen) wird die Transaktion zurückgezogen. 3. Isolationstransaktionen werden unabhängig voneinander ausgeführt. 4. Zuverlässigkeit: Nach einem Software- oder Hardwareabsturz verwendet der InnoDB-Datentabellentreiber Protokolldateien, um diese zu rekonstruieren und zu ändern. Offene Transaktion START TRANSACTION oder BEGIN Transaktion festschreiben (Transaktion schließen) BEGEHEN Transaktion abbrechen (Transaktion schließen) ROLLBACK Wendepunkt SPEICHERPUNKT adqoo_1 ROLLBACK ZUM SAVEPOINT adqoo_1 Transaktionen, die vor dem Wiedereintrittspunkt adqoo_1 auftreten, werden festgeschrieben, und Transaktionen, die nach adqoo_1 auftreten, werden ignoriert. Beendigung der Transaktion Einstellen des Autocommit-Modus Transaktionssperrmodus Systemvorgabe: Sie müssen nicht auf das Ende einer Transaktion warten und können die Ergebnisse direkt abfragen, jedoch nicht verändern oder löschen. Der folgende Modus ist erforderlich, um den Sperrmodus einzustellen 1. WÄHLEN SIE ... SPERREN IM TEILENMODUS (gemeinsames Schloss) 2. SELECT ... FOR UPDATE (exklusive Sperre) 3. EINFÜGEN / AKTUALISIEREN / LÖSCHEN 4. Anti-Einfügesperre <br /> Beispiel: SELECT * FROM tablename WHERE id>200 5. Deadlock <br /> Deadlocks automatisch erkennen. Der zuerst eingehende Prozess wird ausgeführt, der nachfolgende Prozess erhält eine Fehlermeldung und führt im ROLLBACK-Modus ein Rollback aus. Transaktionsisolationsmodus FESTLEGEN DER TRANSAKTIONSISOLATIONSSTUFE [SESSION|GLOBAL] 1. Der SET-Befehl ohne SESSION oder GLOBAL ist nur für die nächste Transaktion gültig 2. SITZUNG EINSTELLEN 3. GLOBAL EINSTELLEN Fehlerbehandlung Führen Sie die entsprechende Verarbeitung gemäß den Fehlerinformationen durch Beispiel für die MySQL-Transaktionsverarbeitung Es gibt zwei Hauptmethoden für die MySQL-Transaktionsverarbeitung 1. Verwenden Sie begin, rollback, commit zur Implementierung
2. Verwenden Sie set direkt, um den automatischen Übermittlungsmodus von MySQL zu ändern
Um die Transaktionsverarbeitung zu implementieren. Beachten Sie jedoch, dass bei Verwendung von set autocommit = 0 alle Ihre nachfolgenden SQL-Anweisungen als Transaktionen verarbeitet werden, bis Sie mit Commit bestätigen oder mit Rollback beenden. Beachten Sie, dass Sie mit dem Beenden dieser Transaktion auch eine neue Transaktion starten! Nach der ersten Methode wird nur die aktuelle als Transaktion behandelt! MySQL unterstützt die Transaktionsverarbeitung nur für Datentabellen vom Typ INNODB und BDB, andere Typen werden nicht unterstützt! mysql> Test verwenden; Datenbank geändert mysql> CREATE TABLE `dbtest`( -> ID int(4) -> ) TYP=INNODB; Abfrage OK, 0 Zeilen betroffen, 1 Warnung (0,05 Sek.) mysql> wähle * aus dbtest -> ; Leerer Satz (0,01 Sek.) mysql> beginnen; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> in dbtest-Werte einfügen (5); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) mysql> in dbtest-Wert einfügen (6); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) mysql> festschreiben; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> wähle * aus dbtest; +------+ |Ich würde| +------+ | 5 | | 6 | +------+ 2 Zeilen im Satz (0,00 Sek.) mysql> beginnen; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> in dbtest-Werte einfügen (7); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) mysql> Rollback; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> wähle * aus dbtest; +------+ |Ich würde| +------+ | 5 | | 6 | +------+ 2 Zeilen im Satz (0,00 Sek.) MySQL-Transaktionsverarbeitung PHP-Code kann die Transaktionsverarbeitung durch die folgenden Methoden der vordefinierten PHP-Klasse mysqli implementieren.
<?php include_once("conn.php"); $id=$_GET[ich]; $conn->autocommit(false); if(!$conn->query("löschen aus tb_sco wobei id='".$id."'")) { $conn->rollback(); } if(!$conn->query("löschen aus tb_stu wobei id='".$id."'")) { $conn->rollback(); } $conn->commit(); $conn->autocommit(true); echo "ok" ?> <?php require('connectDB.php'); //Datenbankverbindung herstellen mssql_query("BEGIN TRANSACTION DEPS02_DEL"); //Transaktion starten $delete_dep_sql="DELETE FROM TBLDEPARTMENT WHERE DEPTID='{$_GET[deptid]}'"; // echo $delete_dep_sql."<br>"; mssql_query($delete_dep_sql); //Datenbank betreiben// var_dump($del_result); $delete_result = mssql_query("wählen Sie @@ROWCOUNT als ID aus"); : $delete_info = mssql_fetch_array($delete_result); Fügt $delete_rows zu $delete_info[0]; // var_dump($delete_rows); mssql_free_result($delete_result); echo "<Skriptsprache=JavaScript>"; if(true){ //Beurteilen, ob das Commit zurückgesetzt werden soll mssql_query("COMMIT TRANSACTION DEPS02_DEL"); //Transaktion committen echo "alert('delete success!');"; }anders{ mssql_query("ROLLBACK TRANSACTION DEPS02_DEL"); //Rollback-Transaktion echo "alert('Löschen fehlgeschlagen!');"; } echo "</script>";mssql_close(); ?> Die MySQL-Transaktionsverarbeitung bietet umfangreiche und wichtige Anwendungen zur Lösung praktischer Probleme. Zu den häufigsten Anwendungen zählen Banküberweisungsdienste, E-Commerce-Zahlungsdienste usw. Es ist jedoch zu beachten, dass die Transaktionsverarbeitungsfunktion von MySQL in der MYSIAM-Speicher-Engine nicht unterstützt wird, in der InnoDB-Speicher-Engine jedoch schon. Jetzt werde ich einen Codeabschnitt hochladen, der Ihnen dabei helfen soll, die MySQL-Transaktionsverarbeitung zu verstehen. Es ist ein einfaches Beispiel, aber es integriert Ideen und ich glaube, dass es eine große Hilfe sein wird. <?php $conn = mysql_connect('localhost','root','IhrPasswort')oder die(mysql_error()); mysql_select_db('Transaktion',$conn); mysql_query('Namen auf utf8 festlegen'); //Transaktion erstellenmysql_query('START TRANSACTION') oder die(mysql_error()); $sqlA="Aktualisiere ein festgelegtes Konto=Konto-1"; wenn(!mysql_query($sqlA)){ mysql_query('ROLLBACK') oder exit(mysql_error());//Beurteilen und zurücksetzen, wenn die Ausführung fehlschlägt exit(); } $sqlB="Aktualisiere B, setze Konto=Konto+1"; wenn(!mysql_query($sqlB)){ mysql_query('ROLLBACK') oder exit(mysql_error());//Beurteilen und zurücksetzen, wenn die Ausführung fehlschlägt exit(); } mysql_query('COMMIT')or die(mysql_error());//Transaktion ausführen mysql_close($conn); ?> Der obige Code kann als Transaktionsfluss zur Simulation von Banküberweisungen verwendet werden. Die Tabellen A und B stellen zwei bei einer Bank eröffnete Konten dar. Wenn Konto A 1 Yuan auf Konto B überweist und der Vorgang fehlschlägt, wird die Überweisung auf den ursprünglichen Zustand zurückgesetzt und es werden keine weiteren Aktionen ausgeführt. Im Gegenteil, wenn der Vorgang erfolgreich ausgeführt wird, erhöht sich der verfügbare Kontostand von Konto B um 1 Yuan, andernfalls wird die Transaktion auf den ursprünglichen Zustand zurückgesetzt. Ich hoffe, dieser Artikel ist hilfreich für Sie. Dies ist das Ende der Einführung in die Verwendung der MySQL-Transaktionsverarbeitung und des Beispielcodes. Ich hoffe, dass alle weiterhin auf unsere Website achten! Wenn Sie MySQL lernen möchten, können Sie weiterhin auf diese Site achten. Das könnte Sie auch interessieren:
|
<<: Verwenden Sie die mail()-Funktion von PHP zum Senden von E-Mails
>>: Detaillierte Erklärung gängiger Befehle im Docker-Repository
Codebeispiel: öffentliche Klasse JDBCDemo3 { öffe...
Docker-Daemon-Socket Der Docker-Daemon kann über ...
In diesem Artikelbeispiel wird der spezifische Co...
Heute zeige ich Ihnen einen gut aussehenden Zähle...
Inhaltsverzeichnis Primärschlüsseleinschränkung E...
Es gibt zwei Installationsmethoden für MySQL: MSI...
So implementieren Sie das MySQL-Umschalten des Da...
Neue Funktionen in MySQL 8: Meine persönliche Mei...
MQTT-Protokoll MQTT (Message Queuing Telemetry Tr...
Anforderung: Manchmal, wenn der Seiteninhalt kurz...
Laden Sie opencv.zip herunter Installieren Sie di...
In diesem Artikel wird die Konsistenzverarbeitung...
Nachdem Vmvare die Festplattengröße der virtuelle...
Build deaktivieren Partitionsausdrücke unterstütz...
Inhaltsverzeichnis Vorwort Erkennen des geöffnete...