Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
db:mysql:mysql_foreign_key [2015/12/19 17:37] webproducer angelegt |
db:mysql:mysql_foreign_key [2016/01/11 00:00] (aktuell) |
||
---|---|---|---|
Zeile 16: | Zeile 16: | ||
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. | 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** | + | [[mysql_engine|Die passende storage engine auswählen und einstellen]] |
- | + | ||
- | <code sql> | + | |
- | ALTER TABLE Spielscheine ENGINE=innodb; | + | |
- | ALTER TABLE Spielfelder ENGINE=innodb; | + | |
- | </code> | + | |
**Hinzufügen des Fremdschlüssels** | **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! | ||
+ | |||
<code sql> | <code sql> | ||
ALTER TABLE Spielfelder ADD CONSTRAINT FK_Spielfeld_Spielschein | ALTER TABLE Spielfelder ADD CONSTRAINT FK_Spielfeld_Spielschein | ||
Zeile 29: | Zeile 27: | ||
ON UPDATE CASCADE ON DELETE CASCADE; | ON UPDATE CASCADE ON DELETE CASCADE; | ||
</code> | </code> | ||
+ | |||
+ | 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 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. | **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** | ||
+ | |||
+ | <code sql> | ||
+ | ALTER TABLE Spielfelder DROP FOREIGN KEY FK_Spielfeld_Spielschein; | ||
+ | </code> | ||