Cursors auf der Serverseite werden in der C-API mit der Funktion
mysql_stmt_attr_set()
implementiert. Dieselbe
Implementierung wird auch für Cursors in gespeicherten Routinen
verwendet. Mit einem Cursor auf der Serverseite kann dort eine
Ergebnismenge generiert werden, wobei an den Client allerdings nur
diejenigen Zeilen übermittelt werden, die dieser verlangt. Wenn
ein Client beispielsweise eine Anfrage ausführt, sich aber nur
für die erste Zeile interessiert, werden die restlichen Zeilen
nicht übertragen.
In MySQL wird ein serverseitiger Cursor von einer temporären
Tabelle verkörpert (materialisiert). Diese ist zu Beginn eine
MEMORY
-Tabelle, wird aber dann in eine
MyISAM
-Tabelle umgewandelt, wenn ihre Größe
den Wert der Systemvariablen
max_heap_table_size
erreicht. Diese
Implementierung führt unter anderem dazu, dass der Abruf von
Zeilen mit einem Cursor bei großen Ergebnismengen langsam ist.
Cursors sind nur-lesend; mit einem Cursor können Sie also keine Zeilen aktualisieren.
UPDATE WHERE CURRENT OF
und DELETE
WHERE CURRENT OF
sind nicht implementiert, da änderbare
Cursors nicht unterstützt werden.
Cursors lassen sich nicht nach einem Commit offen halten.
Cursors unterscheiden nicht zwischen Groß- und Kleinschreibung.
Cursors sind nicht scrollbar.
Cursors haben keinen Namen. Der Anweisungs-Handler fungiert als Cursor-ID.
Sie können immer nur einen einzigen Cursor pro vorbereiteter Anweisung offen haben. Wenn Sie mehrere Cursors benötigen, müssen Sie mehrere Anweisungen vorbereiten.
Sie dürfen keinen Cursor für eine Anweisung benutzen, die eine
Ergebnismenge generiert, wenn die Anweisung nicht im
Prepared-Modus unterstützt wird. Dazu gehören Anweisungen wie
beispielsweise CHECK TABLES
, HANDLER
READ
und SHOW BINLOG EVENTS
.
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.