Dies ist eine alte Version des Dokuments!


LU08e – Referenzaktionen testen (RESTRICT, CASCADE, SET NULL)

-- 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';

Person in Cast kann nicht gelöscht werden:

DELETE FROM person WHERE name='Scarlett Johansson';  -- sollte FEHLER liefern (RESTRICT)

Regie löschen → Film bleibt, Regie-FK wird NULL:

DELETE FROM person WHERE name='Sofia Coppola';
SELECT film_id, title, director_id FROM film;

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
  • FK-Spalte ist NOT NULL, Aktion = SET NULLFehler (unvereinbar).
  • FK/PK-Datentypen passen nicht (z. B. SIGNED vs. UNSIGNED) ⇒ Fehler.
  • ON-Bedingungen „passen nicht zur Geschäftsregel“ ⇒ unerwartete Lösch-/Update-Effekte.
  • modul/m290_guko/learningunits/lu08/theorie/e_fk-abfragen.1760165543.txt.gz
  • Zuletzt geändert: 2025/10/11 08:52
  • von gkoch