Dies ist eine alte Version des Dokuments!
LU08e – Referenzaktionen testen (RESTRICT, CASCADE, SET NULL)
4.1) Testdaten anlegen
-- Personen INSERT INTO person(name) VALUES ('Sofia Coppola'), ('Scarlett Johansson'), ('Bill Murray'); -- Film INSERT INTO film(title, released_year, director_id) VALUES ('Lost in Translation', 2003, (SELECT person_id FROM person WHERE name='Sofia Coppola')); -- Besetzung INSERT INTO film_cast(film_id, person_id, ROLE) SELECT f.film_id, p.person_id, 'Lead' FROM film f JOIN person p ON p.name IN ('Scarlett Johansson','Bill Murray') WHERE f.title='Lost in Translation';
4.2) RESTRICT beobachten
Person in Cast kann nicht gelöscht werden:
DELETE FROM person WHERE name='Scarlett Johansson'; -- sollte FEHLER liefern (RESTRICT)
4.3) SET NULL beobachten
Regie löschen → Film bleibt, Regie-FK wird NULL:
DELETE FROM person WHERE name='Sofia Coppola'; SELECT film_id, title, director_id FROM film;
4.4) CASCADE beobachten
Film löschen → zugehörige Cast-Zeilen verschwinden:
DELETE FROM film WHERE title='Lost in Translation'; SELECT * FROM film_cast; -- Cast-Einträge sollten weg sein
4.5) Typische Fehlerbilder
- FK-Spalte ist NOT NULL, Aktion = SET NULL ⇒ Fehler (unvereinbar).
- FK/PK-Datentypen passen nicht (z. B. SIGNED vs. UNSIGNED) ⇒ Fehler.
- ON-Bedingungen „passen nicht zur Geschäftsregel“ ⇒ unerwartete Lösch-/Update-Effekte.