====== 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