Kapitel 7: MySQL-Sprachreferenz 447
Wenn Sie das Wort QUICK angeben, fasst der Tabellen-Handler w¨ahrend des L¨oschvorgangs
keine Index-Bl¨atter (Index Leafs) zusammen, was bestimmte Arten von L¨oschvorg¨angen
beschleunigen kann.
In MyISAM-Tabellen werden gel¨oschte Datens¨atze in einer verkn¨upften Liste verwaltet
und nachfolgende INSERT-Operationen benutzen alte Datensatzpositionen neu. Um un-
benutzten Platz freizugeben und Dateigr¨oßen zu verringern, benutzen Sie das OPTIMIZE
TABLE-Statement oder das myisamchk-Dienstprogramm, um die Tabellen neu zu organ-
isieren. OPTIMIZE TABLE ist einfacher, aber myisamchk ist schneller. Siehe Abschnitt 5.5.1
[OPTIMIZE TABLE], Seite 240 und Abschnitt 5.4.6.10 [Optimisation], Seite 233.
Das Multi-Tabellen-L¨oschformat wird ab MySQL 4.0.0 unterst¨utzt.
Die Idee ist, dass nur ¨ubereinstimmende Zeilen aus den Tabellen, die VOR der FROM-Klausel
stehen, gel¨oscht werden. Die Auswirkung ist, dass Sie Zeilen aus vielen Tabellen zugleich
l¨oschen k¨onnen, sowie dass zus¨atzliche Tabellen zum Suchen benutzt werden.
Das .*-Zeichen nach den Tabellennamen ist nur aus Gr¨unden der Kompatibilit¨at mit Access
vorhanden:
DELETE t1,t2 FROM t1,t2,t3 WHERE t1.id=t2.id AND t2.id=t3.id
In diesem Fall werden ¨ubereinstimmende Zeilen nur aus den Tabellen t1 und t2 gel¨oscht.
ORDER BY und Benutzung mehrfacher Tabellen bei DELETE wird in MySQL 4.0 unterst¨utzt.
Wenn eine ORDER BY-Klausel benutzt wird, werden die Zeilen in dieser Reihenfolge gel¨oscht.
Das ist nur in Verbindung mit LIMIT wirklich sinnvoll. Beispiel:
DELETE FROM logdatei
WHERE user = ’jcole’
ORDER BY zeitstempel
LIMIT 1
Das l¨oscht den ¨altesten Eintrag (von zeitstempel), wo die Zeile mit der WHERE-Klausel
¨ubereinstimmt.
Die MySQL-spezifische LIMIT rows-Option f¨ur DELETE weist den Server an, welche maxi-
male Anzahl von Zeilen gel¨oscht wird, bevor die Kontrolle an den Client zur¨uck gegeben
wird. Das kann benutzt werden um sicherzustellen, dass ein bestimmter DELETE-Befehl
nicht zu viel Zeit beansprucht. Sie k¨onnen den DELETE-Befehl einfach wiederholen, bis die
Anzahl betroffener Zeilen kleiner ist als der LIMIT-Wert.
7.4.7 TRUNCATE-Syntax
TRUNCATE TABLE tabelle
In Version 3.23 wird TRUNCATE TABLE auf COMMIT ; DELETE FROM tabelle gemappt. Siehe
Abschnitt 7.4.6 [DELETE], Seite 446.
Die Unterschiede zwischen TRUNCATE TABLE und DELETE FROM .. sind:
• TRUNCATE f¨uhrt ein L¨oschen und Neuerzeugen der Tabelle durch, was viel schneller
sit, als Zeilen eine nach der anderen zu l¨oschen.
• Nicht transaktionssicher. Sie erhalten einen Fehler, wenn Sie eine aktive Transaktion
haben oder eine aktive Tabellensperre.
• Gibt die Anzahl gel¨oschter Zeilen nicht zur¨uck.
Comentarios a estos manuales