„a foreign key constraint fails“ umgehen

MySQL-Datenbanken, die die Tabellenstruktur innoDB nutzen, haben ebenfalls die Unterstützung von so genannten Foreign Keys, die Daten tabellenübergreifend verknüpfen können. Dies kann beim Löschen von Tabellen jedoch zu Problemen führen.

Genauer gesagt kommt es beim Löschen einer Tabelle, deren Foreign Keys noch nicht vorher entfernt wurden, d. h. deren Verknüpfungen zu anderen Tabellen noch vorhanden sind, zu folgender Fehlermeldung:

1217 – Cannot delete or update a parent row: a foreign key constraint fails

Normalerweise müssen nämlich, sofern man nur einzelne Tabellen löscht, sämtliche Foreign Keys zuerst entfernt werden. Andernfalls lässt sich nur die gesamte Datenbank ohne Fehler löschen.

Seit phpMyAdmin 4.0 gibt es die Möglichkeit, bei einer entsprechenden Abfrage direkt darunter einen Haken entfernen, um die Fremdschlüsselüberprüfung zu deaktivieren und die Fehlermeldung damit zu umgehen. Damit lassen sich dann Tabellen mit Foreign Keys ohne Fehlermeldung entfernen. Aber Achtung: Dies kann zu unvorhergesehenen Problemen führen.

Und was, wenn man noch kein phpMyAdmin 4.0 besitzt?
Auch das ist einfach: Man muss lediglich den entsprechenden Wert, den phpMyAdmin normal selbst ändert, um eine Löschung zu ermöglichen, selbst ändern. Das geht mit dem Befehl SET FOREIGN_KEY_CHECKS=0;. Damit wird die Überprüfung genauso aktiviert. Danach muss dann die Abfrage zum Löschen der gewünschten Tabelle angegeben werden und dann der Wert FOREIGN_KEY_CHECKS wieder auf 1 mit folgendem Befehl gesetzt werden: SET FOREIGN_KEY_CHECKS=1;.
Die gesamte Abfrage könnte dann folgendermaßen aussehen:

SET FOREIGN_KEY_CHECKS=0;
DROP TABLE table_with_foreign_key;
SET FOREIGN_KEY_CHECKS=1;

Damit sollte die Tabelle ohne eine entsprechende Fehlermeldung aus der MySQL-Datenbank entfernt werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert