SQL DELETE
Befehl wird verwendet um bereits existierende SQL Zeilen aus einer SQL Tabelle zu löschen.
DELETE entfernt komplette Datensätze (Zeilen), nicht einzelne Spalten.
DELETE Ablauf:
Start
│
│ DELETE FROM Tabelle
│ WHERE bedingung
▼
┌──────────┐
│ WHERE │ ACHTUNG!
│ Klausel? │ ┌──────────────────┐
│ │───>│ ALLE Zeilen │
└────┬─────┘ NEIN│ werden gelöscht! │
│ JA └──────────────────┘
▼
┌──────────┐
│ Finde │
│ passende │
│ Zeilen │
└────┬─────┘
│
▼
┌──────────┐
│ Lösche │
│ Zeilen │
└────┬─────┘
│
▼
Erfolg!
Visuelle Darstellung - Eine Zeile löschen:
VORHER:
┌────┬─────────┬──────────┬───────┐
│ id │ vorname │ nachname │ alter │
├────┼─────────┼──────────┼───────┤
│ 1 │ Max │ Müller │ 18 │
│ 2 │ Anna │ Schmidt │ 19 │
│ 3 │ Tom │ Wagner │ 20 │
└────┴─────────┴──────────┴───────┘
DELETE FROM Schueler
WHERE id = 2;
NACHHER:
┌────┬─────────┬──────────┬───────┐
│ id │ vorname │ nachname │ alter │
├────┼─────────┼──────────┼───────┤
│ 1 │ Max │ Müller │ 18 │
│ 3 │ Tom │ Wagner │ 20 │
└────┴─────────┴──────────┴───────┘
Anna wurde KOMPLETT gelöscht!
Mehrere Zeilen löschen:
VORHER:
┌────┬─────────┬──────────┬───────┐
│ id │ vorname │ nachname │ alter │
├────┼─────────┼──────────┼───────┤
│ 1 │ Max │ Müller │ 17 │
│ 2 │ Anna │ Schmidt │ 19 │
│ 3 │ Tom │ Wagner │ 16 │
│ 4 │ Lisa │ Becker │ 20 │
└────┴─────────┴──────────┴───────┘
DELETE FROM Schueler
WHERE alter < 18;
NACHHER:
┌────┬─────────┬──────────┬───────┐
│ id │ vorname │ nachname │ alter │
├────┼─────────┼──────────┼───────┤
│ 2 │ Anna │ Schmidt │ 19 │
│ 4 │ Lisa │ Becker │ 20 │
└────┴─────────┴──────────┴───────┘
GEFAHR - Ohne WHERE:
DELETE FROM Schueler; ← KEIN WHERE!
┌────┬─────────┬──────────┬───────┐
│ id │ vorname │ nachname │ alter │
├────┼─────────┼──────────┼───────┤
│ │ │ │ │ ← LEER!
└────┴─────────┴──────────┴───────┘
ALLES GELÖSCHT!
Syntax - Einzelne Zeile
DELETE FROM Tabell_Name
WHERE Bedingung;
Syntax - Mehrere Zeilen
DELETE FROM Tabell_Name
WHERE Spalte_Name IN (wert1, wert2, wert3);
Syntax - Alle Zeilen (GEFAHR!)
DELETE FROM Tabell_Name;
Praktisches Beispiel
-- Eine Zeile löschen
DELETE FROM Schueler
WHERE schueler_id = 1;
-- Mehrere Zeilen löschen (mit IN)
DELETE FROM Schueler
WHERE schueler_id IN (1, 3, 5);
-- Mehrere Zeilen löschen (mit Bedingung)
DELETE FROM Schueler
WHERE YEAR(geburtsdatum) < 2005;
-- Alle Zeilen löschen (VORSICHT!)
DELETE FROM Kurse;
Prüfungsrelevant
- DELETE ist Teil des DML (Data Manipulation Language)
- Löscht komplette Zeilen (Datensätze)
- Ohne WHERE wird ALLES gelöscht
- Tabelle bleibt bestehen (nur Inhalt weg)
GEFAHR!
DELETE FROM Schueler;
Ohne WHERE werden ALLE Schüler gelöscht!
Die Tabelle ist dann leer, existiert aber noch.
IMMER WHERE verwenden (außer du willst wirklich alles löschen)
DELETE vs TRUNCATE vs DROP
┌──────────┬─────────────┬──────────────┬──────────────┐
│ Befehl │ Löscht │ Tabelle? │ Rückgängig? │
├──────────┼─────────────┼──────────────┼──────────────┤
│ DELETE │ Zeilen │ bleibt │ Ja (ROLLBACK)│
│ TRUNCATE │ Alle Zeilen │ bleibt │ Nein │
│ DROP │ Alles │ wird gelöscht│ Nein │
└──────────┴─────────────┴──────────────┴──────────────┘
Best Practice
- Erst SELECT mit WHERE testen:
SELECT * FROM Schueler WHERE id = 1;
- Dann DELETE mit gleicher WHERE:
DELETE FROM Schueler WHERE id = 1;