Ehe auf der Tabelle irgendwelche Lese- oder Schreiboperationen ausgeführt werden, ruft der MySQL Server die Methode handler::open() auf, um die Datendateien und (sofern vorhanden) die Indexdateien der Tabelle zu öffnen.
int open(const char *name, int mode, int test_if_locked);
Der erste Parameter ist der Name der zu öffnenden Tabelle und der
zweite legt fest, welche Datei geöffnet oder welche Operation
ausgeführt werden soll. Die Werte sind in
handler.h
definiert und werden hier noch
einmal wiedergegeben:
O_RDONLY - Mit nur-lesendem Zugriff öffnen O_RDWR - Mit Lese-/Schreibzugriff öffnen
Die letzte Option legt fest, ob der Handler auf eine Tabellensperre achten soll, bevor er die Tabelle öffnet. Folgende Möglichkeiten stehen zur Verfügung:
#define HA_OPEN_ABORT_IF_LOCKED 0 /* der Default */ #define HA_OPEN_WAIT_IF_LOCKED 1 #define HA_OPEN_IGNORE_IF_LOCKED 2 #define HA_OPEN_TMP_TABLE 4 /* es ist eine temporäre Tabelle */ #define HA_OPEN_DELAY_KEY_WRITE 8 /* nicht den Index aktualisieren */ #define HA_OPEN_ABORT_IF_CRASHED 16 #define HA_OPEN_FOR_REPAIR 32 /* auch öffnen, wenn sie abgestürzt ist */
Die Speicher-Engine muss in der Regel irgendeine Art von
Zugriffskontrolle implementieren, um in einer Multithread-Umgebung
Schäden an der Tabelle zu verhüten. Ein Beispiel für die
Implementierung von Dateisperren finden Sie in den Methoden
get_share()
und
free_share()
von
sql/examples/ha_tina.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.