Rolf B: MYSQLI Datenbank mit komplexeren Einträgen?

Beitrag lesen

Hallo Rudi,

wenn Du eine Person löschst und möchtest, dass alle von ihr abhängigen Einträge in anderen Tabellen automatisch gelöscht werden, benötigst Du Fremdschlüssel (FOREIGN KEY).

In einer von der Person abhängigen Tabelle XY befindet sich typischerweise die Personen-ID. Wenn Du dann für die Tabelle XY definierst, dass die dort gespeicherte Personen-ID ein Fremdschlüssel ist und sich darin die ID aus der Personentabelle befindet (WIE man das tut, hängt vom verwendeten Tool ab), dann kannst Du dem noch hinzufügen, wie sich der Fremdschlüssel bei Änderungen in der Personentabelle verhalten soll. Du hast die Wahl zwischen CASCADE (Löschung der Person löst die Zeile mit dem Fremdschlüssel bzw. Ändern der Personen-ID ändert den Fremdschlüssel automatisch mit), RESTRICT (solange eine Personen-ID als Fremdschlüssel vorkommt, kannst Du die Row nicht löschen oder die Personen-ID ändern) oder SET NULL (Löschen oder Ändern der ID setzt die Einträge, wo sie als Fremdschlüssel vorkommt, auf NULL).

Was Du ohne Fremdschlüssel tust, hast Du richtig erkannt:

Durchsuche ich dann strategisch ALLE Tabellen und lösche...

Nicht alle. Nur die, wo die Personen-ID als Fremdschlüssel vorkommt. Das sind nicht unbedingt alle. Es gibt ja auch Tabellen, deren Inhalt nicht von einer Person abhängt.

Zu Beachten

Kaskadieren von Fremdschlüsseln funktioniert nicht in jeder Datenbank-Engine. Bei MYSQL/MariaDB benötigst Du InnoDB, damit das geht. MyISAM unterstützt das nicht.

Rolf

--
sumpsi - posui - obstruxi