SQL - Cannot delete or update a parent row: a foreign key constraint fails?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Du musst die andere(n) Tabellen suchen, die auf diesen Datensatz verweisen, also ein foreign key auf deine Tabelle haben, wo du eine Zeile löschen willst. Du musst dann zuerst in allen Tabellen den/die Datensatz(e) löschen, der auf den Eintrag in "deiner" Tabelle verweisen, erst dann kannst du den Eintrag in deiner Tabelle löschen.

Beispiel (kenne dieses Woltlab nicht, daher nur so): Du hast eine Tabelle user mit einer userid. In einer 2. Tabelle beitrag hast du die Beiträge, dort gibt es einen Verweis auf die userid. Dort ist festgeelgt, das userid ein forein key von user ist. Das macht man, damit keine inkonsistenz auftritt, d.h. du nicht auf einmal einen Beitrag hast, der keinem User mehr zugeordnet werden kann. Mit diesem foreign key stellt die Datenbank sicher, das es, solange es noch Beiträge von dem User gibt, der User nicht gelöscht werden kann (dann kommt der angesprochene Fehler).

Woher ich das weiß:Studium / Ausbildung – Informatiker

Du kannst mal SET FOREIGN_KEY_CHEKS=OFF; die Prüfunga bschalten. danach löschen und mit SET FOREIGN_KEY_CHEKS=ON; die Checks wieder einschalten.

Da nicht steht, welche SQL du hast kanns auch SET FOREIGN_KEY_CHEKS=0 bzw 1 sein.


iQa1x  22.09.2020, 13:53

Das mag zwar erstmal funktionieren, aber die Wahrscheinlichkeit, dass nach so einer Aktion hinterher die Software abstürzt, ist ziemlich hoch, die foreign keys sind ja nicht zum Spaß definiert....

0