HANDLERtbl_name
OPEN [ ASalias
] HANDLERtbl_name
READindex_name
{ = | >= | <= | < } (value1
,value2
,...) [ WHEREwhere_condition
] [LIMIT ... ] HANDLERtbl_name
READindex_name
{ FIRST | NEXT | PREV | LAST } [ WHEREwhere_condition
] [LIMIT ... ] HANDLERtbl_name
READ { FIRST | NEXT } [ WHEREwhere_condition
] [LIMIT ... ] HANDLERtbl_name
CLOSE
Die Anweisung HANDLER
bietet direkten Zugriff
auf die Schnittstellen der Speicher-Engine einer Tabelle. Sie
steht für MyISAM
- und
InnoDB
-Tabellen zur Verfügung.
Die Anweisung HANDLER ... OPEN
öffnet eine
Tabelle und gestattet den Zugriff über nachfolgende
HANDLER ... READ
-Anweisungen. Dieses
Tabellenobjekt wird nicht mit anderen Threads gemeinsam genutzt
und wird erst geschlossen, wenn der Thread HANDLER ...
CLOSE
aufruft oder beendet wird. Wenn Sie die Tabelle
unter Verwendung eines Alias öffnen, müssen nachfolgende
Referenzierungen durch andere
HANDLER
-Anweisungen den Alias statt des
Tabellennamens verwenden.
Die erste HANDLER ... READ
-Syntax holt einen
Datensatz, bei dem der angegebene Index den übergebenen Werten
entspricht und die WHERE
-Bedingung erfüllt
ist. Wenn Sie einen mehrspaltigen Index haben, geben Sie die
Indexspaltenwerte als kommagetrennte Liste an. Entweder geben
Sie Werte für alle Spalten im Index oder aber Werte für das
links stehende Präfix der Indexspalten an. Angenommen, ein
Index my_idx
enthält drei Spalten namens
col_a
, col_b
und
col_c
in genau dieser Reihenfolge. Die
Anweisung HANDLER
kann Werte für alle drei
Spalten im Index oder für die Spalten in einem links stehenden
Präfix angeben. Zum Beispiel:
HANDLER ... READ my_idx = (col_a_val,col_b_val,col_c_val) ... HANDLER ... READ my_idx = (col_a_val,col_b_val) ... HANDLER ... READ my_idx = (col_a_val) ...
Um die HANDLER
-Schnittstelle für die
Referenzierung des Primärschlüssels einer Tabelle zu
verwenden, setzen Sie den Bezeichner in Anführungszeichen
(`PRIMARY`
).
HANDLER tbl_name
READ `PRIMARY` ...
Die zweite HANDLER ... READ
-Syntax holt aus
der Tabelle einen Datensatz in der Indexreihenfolge, die der
WHERE
-Bedingung entspricht.
Die dritte HANDLER ... READ
-Syntax holt aus
der Tabelle einen Datensatz in der natürlichen
Datensatzreihenfolge, die der WHERE
-Bedingung
entspricht. Sie ist schneller als HANDLER
, wenn ein
vollständiger Tabellenscan gewünscht wird. Die natürliche
Datensatzreihenfolge ist die Reihenfolge, in der die Datensätze
in der Datendatei einer tbl_name
READ
index_name
MyISAM
-Tabelle
gespeichert sind. Diese Anweisung funktioniert auch bei
InnoDB
-Tabellen, aber das Konzept greift hier
in Ermangelung einer separaten Datendatei nicht.
Ohne eine LIMIT
-Klausel holen alle Formen von
HANDLER ... READ
einen einzelnen Datensatz
(sofern vorhanden). Um eine bestimmte Anzahl Datensätze
zurückzugeben, fügen Sie eine LIMIT
-Klausel
ein. Sie hat dieselbe Syntax wie bei der
SELECT
-Anweisung. Siehe auch
Abschnitt 13.2.7, „SELECT
“.
HANDLER ... CLOSE
schließt eine Tabelle, die
mit HANDLER ... OPEN
geöffnet worden war.
HANDLER
ist eine etwas maschinennahe
Anweisung. Sie bietet z. B. keine Konsistenz: HANDLER
... OPEN
fertigt keine
Momentaufnahme der Tabelle an und sperrt sie
nicht. Das bedeutet, dass, nachdem eine
HANDLER ... OPEN
-Anweisung abgesetzt wurde,
die Tabellendaten (vom aktuellen, aber auch von anderen Threads)
modifiziert werden können und diese Änderungen dann für
HANDLER ... NEXT
- oder HANDLER ...
PREV
-Scans unter Umständen nur teilweise sichtbar
sind.
Es gibt eine Reihe von Gründen zur Verwendung der
HANDLER
-Schnittstelle anstelle einer normalen
SELECT
-Anweisung:
HANDLER
ist schneller als
SELECT
:
Für HANDLER ... OPEN
wird ein
dediziertes Speicher-Engine-spezifisches Handler-Objekt
reserviert. Das Objekt wird bei nachfolgenden
HANDLER
-Anweisungen für diese
Tabelle wiederverwendet; es muss nicht jeweils neu
initialisiert werden.
Der Analyseaufwand ist geringer.
Es ist kein zusätzlicher Aufwand für den Optimierer oder die Abfrageüberprüfung erforderlich.
Die Tabelle muss nicht zwischen zwei Handler-Anforderungen gesperrt werden.
Die Handler-Schnittstelle muss keine konsistente Sicht
der Daten bieten (Dirty Reads beispielsweise sind
zulässig) – die Speicher-Engine kann also
Optimierungen verwenden, die SELECT
normalerweise nicht zulassen würde.
Bei Anwendungen, die eine maschinennahe
ISAM
-artige Schnittstelle verwenden,
erleichtert HANDLER
deren Portierung auf
MySQL.
HANDLER
erlaubt Ihnen das Durchlaufen
einer Datenbank auf eine Weise, die mit
SELECT
– wenn überhaupt – nur sehr
schwierig zu realisieren ist. Die
HANDLER
-Schnittstelle ist eine
natürlicher anmutende Art der Datensicht, wenn Sie mit
Anwendungen arbeiten, die eine interaktive
Benutzeroberfläche für die Datenbank bereitstellen.
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.