Der MySQL Server führt UPDATE
-Anweisungen aus,
indem er so lange (Tabelle, Index, Bereich usw.) scannt, bis er
eine Zeile findet, die zu der WHERE
-Klausel der
UPDATE
-Anweisung passt. Dann ruft er die
Funktion
update_row()
auf:
int ha_foo::update_row(const byte *old_data, byte *new_data)
Der Parameter *old_data
enthält die Daten, die
vor dem Update in der Zeile gespeichert waren, während der
Parameter *new_data
den neuen Zeileninhalt
enthält (im internen Zeilenformat von MySQL).
Wie ein Update durchgeführt wird, hängt vom Zeilenformat und der Speicherimplementierung ab. Manche Speicher-Engines ersetzen Daten direkt, während andere Implementierungen die vorhandene Zeile löschen und die neue Zeile am Ende der Datendatei anfügen.
Speicher-Engines ohne Indizierung können den Inhalt des
Parameters *old_data
ignorieren und müssen
sich nur mit dem Pufferinhalt *new_data
abgeben. Engines mit Transaktionsunterstützung müssen unter
Umständen die Puffer vergleichen, um für ein mögliches
späteres Rollback herauszufinden, welche Änderungen vorgenommen
wurden.
Enthält die zu ändernde Tabelle Zeitstempelspalten, muss die
Funktion update_row()
auch diese Zeitstempel
aktualisieren. Das folgende Beispiel stammt von der
Speicher-Engine CSV
:
int ha_tina::update_row(const byte * old_data, byte * new_data) { int size; DBUG_ENTER("ha_tina::update_row"); statistic_increment(table->in_use->status_var.ha_read_rnd_next_count, &LOCK_status); if (table->timestamp_field_type & TIMESTAMP_AUTO_SET_ON_UPDATE) table->timestamp_field->set_time(); size= encode_quote(new_data); if (chain_append()) DBUG_RETURN(-1); if (my_write(share->data_file, buffer.ptr(), size, MYF(MY_WME | MY_NABP))) DBUG_RETURN(-1); DBUG_RETURN(0); }
Beachten Sie, wie in diesem Beispiel der Zeitstempel eingestellt wurde.
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.