Benutzer-Werkzeuge

Webseiten-Werkzeuge


db:mysql:mysql_foreign_key

Dies ist eine alte Version des Dokuments!


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.

Umstellung der Engine

ALTER TABLE Spielscheine ENGINE=innodb;
ALTER TABLE Spielfelder ENGINE=innodb;

Hinzufügen des Fremdschlüssels

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

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.

db/mysql/mysql_foreign_key.1450543026.txt.gz · Zuletzt geändert: 2015/12/19 00:00 (Externe Bearbeitung)