START TRANSACTION | BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET AUTOCOMMIT = {0 | 1}
        Die Anweisungen START TRANSACTION und
        BEGIN starten eine neue Transaktion.
        COMMIT übergibt die aktuelle Transaktion,
        macht also die entsprechenden Änderungen permanent. Mit
        ROLLBACK machen Sie die laufende Transaktion
        rückgängig, d. h., alle Änderungen werden zurückgenommen.
        Die Anweisung SET AUTOCOMMIT schließlich
        aktiviert oder deaktiviert den standardmäßigen
        Autocommit-Modus für die aktuelle Verbindung.
      
        Das optionale Schlüsselwort WORK wird für
        COMMIT und RELEASE
        unterstützt, ebenso die CHAIN- und
        RELEASE-Klauseln. CHAIN
        und RELEASE können verwendet werden, um den
        Transaktionsabschluss besser steuern zu können. Der Wert der
        Systemvariablen completion_type bestimmt das
        Standardverhalten beim Transaktionsabschluss. Siehe auch
        Abschnitt 5.2.2, „Server-Systemvariablen“.
      
        Die AND CHAIN-Klausel bewirkt, dass eine neue
        Transaktion beginnt, sobald die aktuelle endet. Die neue
        Transaktion hat dabei dieselbe Isolierungsstufe wie die zuvor
        beendete Transaktion. Die RELEASE-Klausel
        bewirkt, dass der Server die aktuelle Clientverbindung nach
        Abschluss der aktuellen Transaktion beendet. Das Schlüsselwort
        NO unterdrückt den Abschluss von
        CHAIN oder RELEASE. Dies
        kann nützlich sein, wenn aufgrund der Einstellung der
        Systemvariablen completion_type der Abschluss
        von CHAIN oder RELEASE
        standardmäßig erzwungen wird.
      
Standardmäßig läuft MySQL im Autocommit-Modus. Das bedeutet, dass, sobald eine Anweisung ausgeführt wird, die eine Tabelle aktualisiert (also ändert), MySQL diese Änderung auf Festplatte speichert.
        Verwenden Sie eine transaktionssichere Speicher-Engine (wie
        InnoDB, BDB oder
        NDB Cluster), dann können Sie den
        Autocommit-Modus mit der folgenden Anweisung deaktivieren:
      
SET AUTOCOMMIT=0;
        Nach der Deaktivierung des Autocommit-Modus durch Setzen der
        AUTOCOMMIT-Variablen auf Null müssen Sie
        Ihre Änderungen mit COMMIT auf Festplatte
        speichern oder mit ROLLBACK rückgängig
        machen, wenn Sie die seit Beginn der Transaktion vorgenommenen
        Änderungen nicht übernehmen wollen.
      
        Um den Autocommit-Modus für eine einzelne Abfolge von
        Anweisungen zu deaktivieren, verwenden Sie die Anweisung
        START TRANSACTION:
      
START TRANSACTION; SELECT @A:=SUM(salary) FROM table1 WHERE type=1; UPDATE table2 SET summary=@A WHERE type=1; COMMIT;
        Bei START TRANSACTION bleibt Autocommit
        deaktiviert, bis Sie die Transaktion mit
        COMMIT oder ROLLBACK
        beenden. Der Autocommit-Modus kehrt dann in seinen vorherigen
        Status zurück.
      
        BEGIN und BEGIN WORK
        werden als Aliase für START TRANSACTION
        benutzt, um eine Transaktion zu starten. START
        TRANSACTION ist die SQL-Standardsyntax und wird als
        Möglichkeit zur Durchführung spontaner Transaktionen
        empfohlen.
      
        Die BEGIN-Anweisung unterscheidet sich von
        der Verwendung des Schlüsselworts BEGIN,
        welches eine mehrteilige BEGIN ...
        END-Anweisung einleitet. Mit Letzterem wird keine
        Transaktion begonnen. Siehe auch Abschnitt 19.2.5, „BEGIN ... END-Syntax für komplexe Anweisungen“.
      
Sie können eine Transaktion auch wie folgt einleiten:
START TRANSACTION WITH CONSISTENT SNAPSHOT;
        Die Klausel WITH CONSISTENT SNAPSHOT startet
        eine konsistente Leseoperation für Speicher-Engines, die diese
        unterstützen. Derzeit betrifft dies nur
        InnoDB. Der Effekt ist derselbe wie beim
        Absetzen einer START TRANSACTION-Anweisung
        gefolgt von einer SELECT-Anweisung für eine
        beliebige InnoDB-Tabelle. Siehe auch
        Abschnitt 14.2.10.4, „Konsistentes Lesen“.
      
        Die Klausel WITH CONSISTENT SNAPSHOT ändert
        die aktuelle Isolationsstufe der Transaktion nicht, d. h., eine
        konsistente Momentaufnahme wird nur dann erstellt, wenn die
        aktuelle Isolationsstufe konsistente Leseoperationen gestattet
        (REPEATABLE READ oder
        SERIALIZABLE).
      
        Bei Beginn einer Transaktion wird implizit UNLOCK
        TABLES ausgeführt.
      
Beste Ergebnisse erhalten Sie, wenn Sie Transaktionen nur bei Tabellen durchführen, die mit einer einzelnen transaktionssicheren Speicher-Engine verwaltet werden. Andernfalls können die folgenden Probleme auftreten:
            Wenn Ihre Tabellen mehrere transaktionssichere
            Speicher-Engines verwenden (z. B. InnoDB
            und BDB) und die Isolationsstufe nicht
            SERIALIZABLE ist, besteht die
            Möglichkeit, dass, wenn eine Transaktion übergeben wird,
            eine andere laufende Transaktion, die dieselben Tabellen
            benutzt, nur einen Teil der durch die erste Transaktion
            vorgenommenen Änderungen erkennt. Die Atomizität der
            Transaktionen ist mithin bei Verwendung mehrerer Engines
            nicht gewährleistet, und es können Inkonsistenzen
            auftreten. (Wenn Transaktionen mehrerer Engines nicht
            häufig vorkommen, können Sie die Isolationsstufe mit
            SET TRANSACTION ISOLATION LEVEL für eine
            Transaktion nach Bedarf auf SERIALIZABLE
            setzen.)
          
Verwenden Sie in einer Transaktion nichttransaktionssichere Tabellen, dann werden alle Änderungen an diesen Tabellen unabhängig vom Status des Autocommit-Modus sofort gespeichert.
            Wenn Sie nach Aktualisierung einer nichttransaktionssicheren
            Tabelle in einer Transaktion eine
            ROLLBACK-Anweisung absetzen, erscheint
            die Warnung
            ER_WARNING_NOT_COMPLETE_ROLLBACK.
            Änderungen an transaktionssicheren Tabellen werden in
            diesem Fall rückgängig gemacht, nicht jedoch Änderungen
            an nichttransaktionssicheren Tabellen.
          
        Jede Transaktion wird nach Absetzen von
        COMMIT am Stück in das Binärlog
        geschrieben. Transaktionen, die per Rollback rückgängig
        gemacht wurden, werden nicht geloggt.
        (Ausnahme: Für Modifikationen
        an nicht transaktionssicheren Tabellen kann kein Rollback
        durchgeführt werden. Wenn eine Transaktion, für die ein
        Rollback erfolgt, Änderungen an nicht transaktionssicheren
        Tabellen enthält, dann wird die gesamte Transaktion am Ende mit
        einer ROLLBACK-Anweisung geloggt, um
        sicherzustellen, dass die Modifikationen an diesen Tabellen
        repliziert werden.) Siehe auch Abschnitt 5.12.3, „Die binäre Update-Logdatei“.
      
        Sie können die Isolationsstufe für Transaktionen mit
        SET TRANSACTION ISOLATION LEVEL ändern.
        Siehe auch Abschnitt 13.4.6, „SET TRANSACTION“.
      
        Ein Rollback kann ein relativ langsamer Vorgang sein, der zudem
        stattfinden kann, ohne dass der Benutzer dies explizit
        angefordert hat (z. B. wenn ein Fehler aufgetreten ist).
        Aufgrund dieser Tatsache zeigt SHOW
        PROCESSLIST in der Spalte State
        für die Verbindung Rolling back an, solange
        implizite oder (durch die SQL-Anweisung
        ROLLBACK) explizite Rollbacks durchgeführt
        werden.
      
Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.

