Bei einer Commit-Operation werden alle während einer Transaktion vorgenommenen Änderungen festgeschrieben, sodass eine Rollback-Operation danach nicht mehr möglich ist. Je nachdem, welche Transaktionsisolation verwendet wurde, werden die Änderungen dann zum ersten Mal für andere Threads sichtbar.
Zur Unterstützung von COMMIT
benötigen Sie
eine Funktion, die wie folgt definiert ist:
int (*commit)(THD *thd, bool all);
Der Name dieser Funktion wird dann im
commit
-Eintrag (dem 12.) des
Handlerton
aufgeführt.
Der Parameter THD
zeigt an, welche
Transaktion festgeschrieben werden soll, und bool
all
legt fest, ob dies ein kompletter Commit ist oder
nur das Ende einer zu einer Transaktion gehörenden Anweisung.
Die Implementierungsdetails von COMMIT
sind
von Engine zu Engine unterschiedlich. Beispiele finden Sie in
ha_innodb.cc
and
ha_berkeley.cc
.
Läuft der Server im Autocommit-Modus, so müsste die
Speicher-Engine automatisch alle nur-lesenden Anweisungen wie
beispielsweise SELECT
festschreiben.
Das "Autocommitten" in einer Speicher-Engine funktioniert durch
Zählen von Sperren. Jeder Aufruf von
external_lock()
inkrementiert den Zähler
und jeder Aufruf von external_lock()
mit
dem Argument F_UNLCK
dekrementiert ihn.
Fällt die Anzahl der Sperren auf null, wird ein Commit
ausgelöst.
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.