Die erste Funktion, die eine Transaktion beginnen kann, ist
start_stmt()
.
Das folgende Beispiel zeigt, wie eine Speicher-Engine eine Transaktion registrieren könnte:
int my_handler::start_stmt(THD *thd, thr_lock_type lock_type) { int error= 0; my_txn *txn= (my_txn *) thd->ha_data[my_handler_hton.slot]; if (txn == NULL) { thd->ha_data[my_handler_hton.slot]= txn= new my_txn; } if (txn->stmt == NULL && !(error= txn->tx_begin())) { txn->stmt= txn->new_savepoint(); trans_register_ha(thd, FALSE, &my_handler_hton); } return error; }
THD
ist die aktuelle Clientverbindung. Sie
speichert zustandsrelevante Daten für den aktuellen Client,
wie beispielsweise seine Identität, Netzwerkverbindung und
andere Verbindungsdaten.
thd->ha_data[my_handler_hton.slot]
ist ein
Zeiger in thd
auf die
verbindungsspezifischen Daten dieser Speicher-Engine. In
diesem Beispiel wird er verwendet, um den Transaktionskontext
zu speichern.
Ein weiteres Beispiel für die Implementierung von
start_stmt()
finden Sie in
ha_innodb.cc
.
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.