LU06d - SQL-DML: Daten löschen (DELETE)

Lernziele

DELETE Statement

Der Befehl DELETE entfernt Datensätze aus einer Tabelle.

DELETE FROM tabellenname
WHERE bedingung;

Ohne WHERE wird die ganze Tabelle geleert.

DELETE FROM tabellenname;

Die Struktur der Tabelle bleibt bestehen, aber alle Zeilen sind weg.

Wie beim UPDATE gilt: Prüfen Sie vor dem Löschen mit einem SELECT und demselben WHERE, welche Zeilen betroffen wären. Details dazu finden Sie in LU06c beim Dry-Run.

//Screencast: DELETE FROM mit WHERE //

Beispiele

Ausgangstabelle:

film_id title director released_year star1
1 Lost in Translation Sofia Coppola 2003 Scarlett Johansson
2 Inception C. Nolan 2010 Leonardo DiCaprio
3 Arrival (Extended Cut) Denis Villeneuve 2016 Amy Adams

Beispiel 1: Gezieltes Löschen über den Primärschlüssel

SELECT * FROM favourite_film WHERE film_id = 1;
 
DELETE FROM favourite_film
WHERE film_id = 1;
film_id title director released_year star1
2 Inception C. Nolan 2010 Leonardo DiCaprio
3 Arrival (Extended Cut) Denis Villeneuve 2016 Amy Adams

Beispiel 2: Mehrere Datensätze auf einmal löschen

DELETE FROM favourite_film
WHERE film_id = 2 OR film_id = 3;

TRUNCATE

TRUNCATE entfernt ebenfalls alle Zeilen einer Tabelle – schneller als DELETE, und mit einem wichtigen Zusatzeffekt: Es setzt den AUTO_INCREMENT-Zähler zurück.

TRUNCATE TABLE tabellenname;

TRUNCATE kennt kein WHERE – es ist immer alles oder nichts. Verwenden Sie es nur, wenn Sie wirklich die komplette Tabelle zurücksetzen wollen, z.B. um mit leeren Testdaten neu zu beginnen.


Guido Koch