4648 Stimmen

MySQL: Daten aus Tabelle löschen - Unterschied zwischen TRUNCATE, DELETE und DROP

Tutorial von Stefan Trost | Letztes Update am 03.06.2023 | Erstellt am 10.11.2011

In diesem kleinen Tutorial möchten wir uns den Unterschied zwischen den MySQL-Befehlen TRUNCATE, DELETE und DROP näher ansehen. Alle drei Befehle haben mit dem Löschen von Daten aus Tabellen oder dem Löschen ganzer Tabellen zu tun.

Das Tutorial ist eingeteilt in die folgenden Abschnitte:

DELETE: Einzelne Datensätze löschen

Der bekannteste der drei Befehle ist DELETE. Mit DELETE ist es möglich, einzelne Datensätze aus einer Tabelle zu löschen. Ein Beispiel für die Anwendung dieses Befehls haben wir hier:

DELETE FROM tab WHERE id = 2;
DELETE FROM tab WHERE id > 7 AND id < 30;
DELETE FROM tab WHERE name = 'Anna';
DELETE FROM tab WHERE name LIKE '%abc%';

Dies sind vier verschiedene SQL-Anweisungen, die jeweils unterschiedliche Datensätze aus der Tabelle mit dem Namen "tab" nach bestimmten Kriterien löschen. Der erste Befehl löscht den Datensatz mit der ID 2, der zweite Befehl alle Datensätze, die eine ID größer als 7 und kleiner als 30 haben (IDs 8 bis 29) und der dritte Befehl löscht den oder die Datensätze, deren Feld "name" genau dem Inhalt "Anna" entspricht beziehungsweise nur "Anna" enthält. Der letzte Befehl wiederum löscht alle Datensätze, in denen im Feld "name" die Zeichenkette "abc" vorkommt.

Wir können an dieser Stelle also beliebige Kriterien für das Löschen der Datensätze definieren, genau so wie wir die Auswahl auch im WHERE-Teil einer SELECT-Anfrage treffen können.

Alle Datensätze aus einer Tabelle löschen

In den Beispielen für den DELETE-Befehl, die wir uns in dem letzten Abschnitt angesehen haben, haben wir hinter WHERE genau beschrieben, welche Datensätze gelöscht werden sollen. Wir können den WHERE-Teil aber auch weglassen:

DELETE FROM tab;

Diese Anweisung enthält keine Einschränkungen, nach welchen Kriterien Datensätze gelöscht werden sollen. Daher werden mit diesem Befehl alle Datensätze aus der Tabelle "tab" unwiderruflich gelöscht. Die ganze Tabelle ist danach leer.

Auch mit dem Befehl TRUNCATE lassen sich alle Datensätze aus einer Tabelle löschen. TRUNCATE kann folgendermaßen aufgerufen werden:

TRUNCATE TABLE tab;

Dieser Befehl löscht alle Daten unwiderruflich aus der Tabelle "tab" und ist damit von der Wirkung auf die Datensätze her identisch mit "DELETE FROM tab". Die technische Umsetzung ist jedoch eine andere:

Unterschied zwischen TRUNCATE und DELETE

Während DELETE alle Datensätze einzeln löscht, geht TRUNCATE anders vor: TRUNCATE löscht zuerst die gesamte Tabelle inklusive der Spaltendefinition und legt danach eine neue identische leere Tabelle ohne Daten an.

Dadurch ist TRUNCATE um einiges schneller als die DELETE-Anweisung. Ein Seiteneffekt dieser unterschiedlichen Herangehensweise ist jedoch, wie die beiden Löschbefehle mit AUTO_INCREMENT-Spalten umgehen. Bei TRUNCATE wird der AUTO_INCREMENT-Wert auf 1 zurückgesetzt, da die komplette Tabelle neu aufgebaut wird. Bei der DELETE-Anweisung wird der AUTO_INCREMENT-Wert dagegen nicht angefasst so dass nach dem Löschen an der Stelle weitergezählt wird, wo aufgehört wurde. Will man seine AUTO_INCREMENT-Werte also behalten, sollte man trotz der schlechteren Performance lieber auf DELETE zurückgreifen oder den Wert vor dem Löschvorgang speichern und anschließend manuell neu setzen.

Komplette Tabelle mit DROP löschen

Der letzte Befehl, den wir uns in diesem Tutorial ansehen möchten heißt DROP:

DROP TABLE tab;
DROP TABLE tab1, tab2;
DROP TABLE IF EXISTS tab1, tab2;

DROP löscht die gesamte Tabelle inklusive Daten und Definition der Tabellenspalten. Die gesamte Tabelle ist danach also verschwunden und kann nicht wiederhergestellt werden! Bei DELETE und TRUNCATE dagegen werden lediglich die Daten aus der Tabelle gelöscht, während die Definitionen der Spalten erhalten bleiben.

Man verwendet DROP wie im Beispiel gezeigt. In der ersten Zeile wird die Tabelle "tab" gelöscht, in der zweiten Zeile sieht man, wie man mehrere Tabellen gleichzeitig in nur einem Statement löschen kann. In der dritten Zeile ist "IF EXISTS" hinzugefügt. Diese Erweiterung sorgt dafür, dass es zu keiner Fehlermeldung kommt, wenn man versucht eine Tabelle zu löschen, die gar nicht existiert.

Warnung

Sie sollten mit den Befehlen DELETE, TRUNCATE und DROP sehr vorsichtig umgehen, da die betroffenen Datensätze oder die ganzen Tabellen nach dem Löschen nicht mehr wieder hergestellt werden können. Seien Sie sich also sicher, ob Sie die Daten wirklich nicht mehr benötigen und legen Sie sicherheitshalber immer eine Sicherheitskopie vor der Benutzung der Befehle an.

Ansonsten bleibt Ihnen nur noch das Neu-Anlegen von Spalten übrig.

AntwortenPositivNegativ

Über den Autor

AvatarSoftware von Stefan Trost finden Sie auf sttmedia.de. Benötigen Sie eine individuelle Software nach Ihren eigenen Wünschen? Schreiben Sie uns: sttmedia.de/kontakt
Profil anzeigen

 

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.