SQL - Cannot delete or update a parent row: a foreign key constraint fails?
Hi, ich wollte mir in der Foren Software WorldLab Suite Forum alle Rechte erteilen (indem ich mir die Gruppe Owner gebe)... Es wurde jedoch nur der Style übernommen und nicht die Gruppe selbst und deren Rechte! Jedenfalls hatte ich ein wenig in der Datenbank rumgespielt, um herauszufinden, wie ich mir nun die Gruppe + die Rechte dazugebe... Und ihr wisst ja, was geschieht, wenn man in Datenbank-Systemen rumspielt! Zwei Tabellen kann ich nun nicht mehr löschen! Statt der Ausführung erscheint dieser Fehler:
Cannot delete or update a parent row: a foreign key constraint fails
Übersetzt also:
Eine übergeordnete Zeile kann nicht gelöscht oder aktualisiert werden: Eine Fremdschlüsseleinschränkung schlägt fehl
Die frage ist nun, wie entferne ich die Tabelle?
2 Antworten
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).
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.
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....