English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

MySQL Transactions

MySQL-Transaktionen werden hauptsächlich für die Verarbeitung großer, komplexer Daten verwendet. Zum Beispiel, in einem Personalverwaltungssystem, wenn Sie eine Person löschen, müssen Sie sowohl die grundlegenden Informationen der Person als auch die mit dieser Person verbundenen Informationen, wie E-Mail, Artikel usw., löschen, so dass diese Datenbankoperationen eine Transaktion darstellen!

  • In MySQL wird die Transaktionsunterstützung nur für Datenbanken oder Tabellen bereitgestellt, die den Innodb-Datenbankmotor verwenden.

  • Transaktionsverarbeitung kann verwendet werden, um die Integrität der Datenbank zu wahren und sicherzustellen, dass SQL-Anweisungen entweder vollständig ausgeführt oder nicht ausgeführt werden.

  • Transaktionen werden verwendet, um Insert, Update, Delete-Anweisungen zu verwalten

Im Allgemeinen müssen Transaktionen bestimmte4Bedingungen (ACID):: Atomarität (AAtomarität, auch Unzerteilbarkeit) und Konsistenz (CKonsistenz), Isolation (IIsolation, auch Unabhängigkeit) und Beständigkeit (DUngültigkeit).

  • Atomarität:Alle Operationen in einer Transaktion (Transaction) werden entweder vollständig abgeschlossen oder nicht durchgeführt, sie enden nicht in einer Zwischenphase. Treten Fehler während der Ausführung einer Transaktion auf, wird diese auf den Zustand vor der Transaktion zurückgesetzt (Rollback), so als ob die Transaktion nie ausgeführt wurde.

  • Konsistenz:Die Integrität der Datenbank wird vor und nach dem Start der Transaktion nicht beschädigt. Dies bedeutet, dass die geschriebenen Daten vollständig den vorgeschriebenen Regeln entsprechen müssen, was die Genauigkeit, die Kausalität und die Fähigkeit des Datenbanksystems umfasst, vorgesehene Aufgaben selbstständig zu erledigen.

  • Isolierbarkeit:Die Datenbank ermöglicht es, dass mehrere gleichzeitig laufende Transaktionen Daten lesen, schreiben und ändern können, die Isolierbarkeit verhindert, dass Daten inkonsistent werden, wenn mehrere Transaktionen gleichzeitig ausgeführt werden. Die Transaktionsisolierung ist in verschiedene Ebenen unterteilt, einschließlich Read uncommitted (Read uncommitted), read committed (read committed), repeatable read (repeatable read) und serializable (Serializable).

  • Dauerhaftigkeit:Nach Abschluss der Transaktionsverarbeitung sind die Änderungen an den Daten dauerhaft, selbst wenn das System ausfällt, gehen sie nicht verloren.

Unter den Standardeinstellungen der MySQL-Kommandozeile werden Transaktionen automatisch abgeschlossen, d.h. nach der Ausführung eines SQL-Befehls wird sofort eine COMMIT-Operation ausgeführt. Daher muss eine Transaktion explizit mit dem Befehl BEGIN oder START TRANSACTION oder mit dem Befehl SET AUTOCOMMIT=0, der das automatische Commit der aktuellen Sitzung verbietet, gestartet werden.

Transaktionssteuerungssätze:

  • BEGIN oder START TRANSACTION öffnet explizit eine Transaktion;

  • COMMIT kann auch als COMMIT WORK verwendet werden, beide sind gleichbedeutend. COMMIT提交事务,使对数据库进行的所有修改成为永久ig;

  • ROLLBACK kann auch als ROLLBACK WORK verwendet werden, beide sind gleichbedeutend. Der Rollback beendet den Benutzertransaktion und kehrt alle nicht bestätigten Änderungen zurück;

  • SAVEPOINT identifier, SAVEPOINT ermöglicht es, in einer Transaktion einen Speicherpunkt zu erstellen, in einer Transaktion können mehrere SAVEPOINT vorhanden sein;

  • RELEASE SAVEPOINT identifier löscht einen Transaktionspunkt, wenn kein angegebener Speicherpunkt vorhanden ist, führt der Befehl eine Ausnahme aus;

  • ROLLBACK TO identifier kehrt die Transaktion zum Markenzeichen zurück;

  • SET TRANSACTION wird verwendet, um den Isolationsgrad der Transaktion zu setzen. Der InnoDB-Speichertriebwerk bietet Transaktionsisolationsebenen wie READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ und SERIALIZABLE.

MySQL-Transaktionen werden hauptsächlich in zwei Methoden behandelt:

1Mit BEGIN, ROLLBACK und COMMIT wird umgesetzt

  • BEGIN Beginne eine Transaktion

  • ROLLBACK Transaktionsrücknahme

  • COMMIT  Transaktionsbestätigung

2、Directly use SET to change MySQL's automatic commit mode:

  • SET AUTOCOMMIT=0   Automatische Abgabe verbieten

  • SET AUTOCOMMIT=1 Automatische Abgabe aktivieren

mysql> use w3codebox;
Database changed
mysql> CREATE TABLE w3codebox_transaction_test(id int(5)) engine=innodb; # Datenbanktabelle erstellen
Query OK, 0 rows affected (0.04 sec)
 
mysql> select * from w3codebox_transaction_test;
Empty set (0.01 sec)
 
mysql> begin; # Transaktion beginnen
Query OK, 0 rows affected (0.00 sec)
 
mysql> insert into w3codebox_transaction_test value(5);
Query OK, 1 rows affected (0.01 sec)
 
mysql> insert into w3codebox_transaction_test value(6);
Query OK, 1 rows affected (0.00 sec)
 
mysql> commit; # Transaktion abschließen
Query OK, 0 rows affected (0.01 sec)
 
mysql> select * from w3codebox_transaction_test;
+------+
| id |
+------+
| 5    |
| 6    |
+------+
2 rows in set (0.01 sec)
 
mysql> begin; # Transaktion beginnen
Query OK, 0 rows affected (0.00 sec)
 
mysql> insert into w3codebox_transaction_test values(7);
Query OK, 1 rows affected (0.00 sec)
 
mysql> rollback; # Zurückrollen
Query OK, 0 rows affected (0.00 sec)
 
mysql> select * from w3codebox_transaction_test; # Da es zurückgerollt wurde, wurden keine Daten eingefügt
+------+
| id |
+------+
| 5    |
| 6    |
+------+
2 rows in set (0.01 sec)
 
mysql>

PHP-Beispiel für Transaktionen

<?php
$dbhost = 'localhost';  // MySQL-Server-Host-Adresse
$dbuser = 'root';            // MySQL-Benutzername
$dbpass = '';123456';          // MySQL-Benutzername und Passwort
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
    die('Connection failed: ' . mysqli_error($conn));
}
// Set encoding to prevent Chinese garbled characters
mysqli_query($conn, "set names utf8);
mysqli_select_db( $conn, 'w3codebox' );
mysqli_query($conn, "SET AUTOCOMMIT=0"); // Set not to auto-commit, because MYSQL defaults to immediate execution
mysqli_begin_transaction($conn);            // Start Transaction Definition
 
if(!mysqli_query($conn, "insert into w3codebox_transaction_test (id) values(8)")
{
    mysqli_query($conn, "ROLLBACK");     // Rollback if Execution Fails
}
 
if(!mysqli_query($conn, "insert into w3codebox_transaction_test (id) values(9)")
{
    mysqli_query($conn, "ROLLBACK");      // Rollback if Execution Fails
}
mysqli_commit($conn);            //Execute Transaction
mysqli_close($conn);
?>