====== LU06d - SQL-DML: Daten löschen (DELETE) ======
===== Lernziele =====
* Ich kann mit DELETE gezielt einen oder mehrere Datensätze löschen.
* Ich kann erklären, was passiert, wenn ich DELETE ohne WHERE ausführe.
* Ich kann den Unterschied zwischen DELETE und TRUNCATE erklären.
===== 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.
{{url>https://player.mux.com/EP5SuKzkzFQyeY6qVddK701iFcG002j2m2sy4z022qspm8?metadata-video-title=DELETE+FROM+WHERE&video-title=DELETE+FROM+WHERE 1200,675 noscroll noborder center|Screencast: DELETE ohne WHERE}}
//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.
----
{{tag>M290-LU06}}
[[https://creativecommons.org/licenses/by-nc-sa/4.0/|{{https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png}}]] Guido Koch