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

Achtung: Diese Seite ist nur noch Teil eines Archivs und wird in Zukunft entfernt.

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:

Quellcode

  1. #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. 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:

Quellcode

  1. SET FOREIGN_KEY_CHECKS=0;
  2. DROP TABLE table_with_foreign_key;
  3. SET FOREIGN_KEY_CHECKS=1;
Damit sollte die Tabelle ohne eine entsprechende Fehlermeldung aus der MySQL-Datenbank entfernt werden.
Über den Autor
Ich bin Webentwickler in Stuttgart und administriere Server seit vielen Jahren. In diesem Blog erstelle ich hauptsächlich Tutorials für andere Webentwickler, Webdesigner und Serveradministratoren.
-------------------------------------------------------------------------------------------------------------------------------------
I’m a web developer in Stuttgart, Germany, and server administrator since many years. This blog mainly contains a tutorial set for other web developer, web designer and server administrators.

3.894 mal gelesen

Kommentare 0

Es wurden keine Einträge gefunden.