Benutzer-Werkzeuge

Webseiten-Werkzeuge


db:mysql:mysql_foreign_key

Datenbank-Konsistenz (referenzielle Integrität)

Um die Konsistenz einer Datenbank zu gewährleisten ist es empfehlenswert, Fremdschlüssel (FOREIGN KEYS) zu erstellen. Somit ist bereits von der Seite der Datenbank her gewährleistet, dass von anderen Datensätzen abhängige Datensätze auch vorhaden sind. Dies kann in der Programmierung Fehler und Abstürze verhindern.

Beispiel:

Wir haben 2 Tabellen, dessen Datensätze voneinander abhängig sind:

  • Spielscheine ( ID, Spiel, Spieleinsatz usw.)
  • Spielfelder ( Spalten: Spielschein, Zahl_1, Zahl_2, Zahl_3 usw.)

Es macht keinen Sinn, dass bei einem gelöschten Spielschein die Spielfelder noch weiterhin in der Datenbank vorhanden sind. Mit einem Fremdschlüssel in der Tabelle „Spielfelder“ können wir erreichen, dass beim Löschen des Spielscheines die zugehörigen Spielfelder automatisch gelöscht werden.

Hinweis/Voraussetzung:

Das Erstellen von Fremdschlüsseln mit der Eigenschaft (ON DELETE CASCADE) kann in MySQL ausschliesslich mit der InnoDB Storage Engine möglich. Daher ist zuvor zu prüfen, ob beim Provider die Umstellung von „MyISAM“-Engine auf die „InnoDB“-Engine möglich ist.

Die passende storage engine auswählen und einstellen

Hinzufügen des Fremdschlüssels

Hinweis: Jeder Name eines Fremdschlüssel (im folgendem Beispiel „FK_Spielfeld_Spielschein“) kann in der gesamten Datenbank nur ein einziges mal verwendet werden!

ALTER TABLE Spielfelder ADD CONSTRAINT FK_Spielfeld_Spielschein
FOREIGN KEY (Spielschein) REFERENCES Spielscheine(ID)
ON UPDATE CASCADE ON DELETE CASCADE;

Falls Sie nach der Ausführung den MySQL-Fehler #1452 („Cannot add or update a child row“) angezeigt bekommen ist die Umstellung nicht möglich, da sich verwaiste Daten in den Tabellen befinden. In diesem konkreten Beispiel wären also Spielfelder vorhanden, zu denen kein Spielschein vorhanden ist.

ON DELETE CASCADE: Bewirkt, dass beim Löschen eines Datensatzes aus der Tabelle „Spielschein“ auch die zugehörigen Datensätze aus der Tabelle „Spielfelder“ gelöscht werden.

ON UPDATE CASCADE: Bewirkt, dass bei der Änderung der ID in der Tabelle „Spielschein“ auch die ID der Tabelle „Spielfelder“ geändert werden.

Löschen eines Fremdschlüssels

ALTER TABLE Spielfelder DROP FOREIGN KEY FK_Spielfeld_Spielschein;
db/mysql/mysql_foreign_key.txt · Zuletzt geändert: 2016/01/11 00:00 (Externe Bearbeitung)