Die Fehlerbehandlung in InnoDB
entspricht nicht
immer dem SQL-Standard. Nach dem Standard müsste jeder Fehler,
der während einer SQL-Anweisung auftritt, den Rollback dieser
Anweisung zur Folge haben. InnoDB
rollt jedoch
manchmal nur einen Teil der Anweisung zurück, oder aber auch die
ganze Transaktion. Die folgenden Einträge beschreiben die
Fehlerbehandlung von InnoDB
:
Wenn Ihr Tablespace vollläuft, tritt ein MySQL Table
is full
-Fehler auf und InnoDB
rollt die SQL-Anweisung zurück.
Ein Transaktions-Deadlock lässt InnoDB
die
gesamte Transaktion zurückrollen. Im Fall eines Lock Wait
Timeout rollt InnoDB
nur die letzte
SQL-Anweisung zurück.
Wenn wegen eines Deadlocks oder Lock Wait Timeouts eine
Transaktion zurückgerollt wird, so werden die in dieser
Transaktion ausgeführten Anweisungen wirkungslos. Wenn jedoch
die Startanweisung der Transaktion START
TRANSACTION
oder BEGIN
war, so
wird die Anweisung durch den Rollback nicht betroffen. Weitere
SQL-Anweisungen werden dann zu einem Teil der Transaktion, bis
ein COMMIT
, ROLLBACK
oder eine andere SQL-Anweisung eintritt, die einen impliziten
Commit verursacht.
Ein Schlüsselduplikat-Fehler rollt die SQL-Anweisung zurück,
wenn Sie nicht die IGNORE
-Option in der
Anweisung angegeben haben.
Ein row too long error
rollt die
SQL-Anweisung zurück.
Andere Fehler werden zumeist auf der MySQL-Ebene erkannt (also
oberhalb der Ebene von InnoDB
), und rollen
die zugehörige SQL-Anweisung zurück. Sperren werden bei
einem Rollback einer einzelnen SQL-Anweisung nicht
freigegeben.
Während eines impliziten Rollback und während der Ausführung
eines expliziten ROLLBACK
-Befehls von SQL zeigt
SHOW PROCESSLIST
den Wert Rolling
back
in der State
-Spalte der
betreffenden Verbindung an.
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.