Je nach verwendeter Speicher-Engine unterstützt der MySQL-Server Transaktionen. Seit MySQL 5.5 ist InnoDB die Standard-Speicher-Engine. InnoDB bietet volle Unterstützung für ACID-Transaktionen.
Transaktionen können entweder mit SQL oder über API-Aufrufe gesteuert
werden. Es wird empfohlen, API-Aufrufe zu verwenden, um den
autocommit
-Modus zu aktivieren oder zu deaktivieren und
um Transaktionen zu übertragen (Commit) und rückgängig zu machen
(Rollback).
Beispiel #1 Einstellen des autocommit
-Modus mit SQL und über die API
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");
/* Empfohlen: Verwendung der API zur Steuerung von Transaktionseinstellungen */
$mysqli->autocommit(false);
/* Wird von Replikations- und Load-Balancing-Plugins nicht erkannt und überwacht */
$mysqli->query('SET AUTOCOMMIT = 0');
Optionale Zusatzpakete, z. B. das Replikations- und Load-Balancing-Plugin,
können API-Aufrufe problemlos überwachen. Wenn Transaktionen über
API-Aufrufe gesteuert werden, bietet das Replikations-Plugin
transaktionsbezogenes Load-Balancing. Transaktionsbezogenes
Load-Balancing ist nicht verfügbar, wenn SQL-Anweisungen verwendet werden,
um den autocommit
-Modus zu setzen oder Transaktionen zu
übertragen oder rückgängig zu machen.
Beispiel #2 Übertragen und Zurücksetzen (Commit und Rollback)
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("example.com", "user", "password", "database");
$mysqli->autocommit(false);
$mysqli->query("INSERT INTO test(id) VALUES (1)");
$mysqli->rollback();
$mysqli->query("INSERT INTO test(id) VALUES (2)");
$mysqli->commit();
Es ist zu beachten, dass der MySQL-Server nicht alle Anweisungen zurücknehmen kann. Einige Anweisungen führen zu einem impliziten Commit.
Siehe auch