Fremdschlüssel zwischen zwei Tabellen ändern
Hallo Liebe Community,
Ich habe folgendes Problem , ich habe zwei Tabellen (vereinfacht dargestellt)
Azubi Beruf
ID |----- ID
fk_beruf <-----| Beruf
In fk_beruf steht eine ID aus Beruf (über einen Foreign Key gepflegt). Jetzt habe ich eine Anwendung geschrieben die es möglich machen soll die Werte in Beruf zu ändern, also z.B. von Fachinformatiker in Fachinformatiker/-in.
Allerdings habe ich dies beim Anlegen der Tabellen nicht bedacht, weshalb die Standarteinstellung ON DELETE RESTRICT ON UPDATE RESTRICT verwendet wurde.
Beim Versuch UPDATE auf CASCADE zu ändern scheitere ich leider.
Folgende Ausgabe erhalte ich wenn ich die Beziehung über phpmyadmin ändern möchte. Verwendet wird MYSQL.
Leider verstehe ich die Fehlermeldung nicht ganz. Gibt es eine Möglichkeit den Beziehung zu ändern oder zu löschen(es kam eine ähnliche Fehlermeldung als ich das versucht habe) und neu anzulegen.
Danke für eure Hilfe.
Nico
Ich habe folgendes Problem , ich habe zwei Tabellen (vereinfacht dargestellt)
Azubi Beruf
ID |----- ID
fk_beruf <-----| Beruf
In fk_beruf steht eine ID aus Beruf (über einen Foreign Key gepflegt). Jetzt habe ich eine Anwendung geschrieben die es möglich machen soll die Werte in Beruf zu ändern, also z.B. von Fachinformatiker in Fachinformatiker/-in.
Allerdings habe ich dies beim Anlegen der Tabellen nicht bedacht, weshalb die Standarteinstellung ON DELETE RESTRICT ON UPDATE RESTRICT verwendet wurde.
Beim Versuch UPDATE auf CASCADE zu ändern scheitere ich leider.
Folgende Ausgabe erhalte ich wenn ich die Beziehung über phpmyadmin ändern möchte. Verwendet wird MYSQL.
ALTER TABLE `berufsbezeichnung` ADD FOREIGN KEY ( `ID` ) REFERENCES `intranet`.`azubi` (`fk_berufsbezeichnung` ) ON DELETE CASCADE ON UPDATE RESTRICT ;
#1452 - Cannot add or update a child row: a foreign key constraint fails (`intranet`.`#sql-199c_2aa`, CONSTRAINT `#sql-199c_2aa_ibfk_1` FOREIGN KEY (`ID`) REFERENCES `azubi` (`fk_berufsbezeichnung`) ON DELETE CASCADE)
Leider verstehe ich die Fehlermeldung nicht ganz. Gibt es eine Möglichkeit den Beziehung zu ändern oder zu löschen(es kam eine ähnliche Fehlermeldung als ich das versucht habe) und neu anzulegen.
Danke für eure Hilfe.
Nico
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 205170
Url: https://administrator.de/forum/fremdschluessel-zwischen-zwei-tabellen-aendern-205170.html
Ausgedruckt am: 23.12.2024 um 14:12 Uhr
2 Kommentare
Neuester Kommentar
Moin simon-ni,
ich fürchte, irgendetwas hast du mit den Foreign-Key-Möglichkeiten falls verstanden.
Bist du dir sicher, dass du richtig zugeordnet hast, wer denn nun "Parent" und wer "Child" in doeser Beziehung sein sollte?
Vielleicht verstehe ich deine Tabellenstruktur ja falsch, einleuchtend wäre sie IMHO so:
Tabelle "Azubi" mit (u.a.) den Feldern "ID", "Name", ..."fk_berufeID". Wobei "fk_berufe_id" eine Zahl ist.
Inhalt z.B.
4711, "Klaus", 1
4712, "Bärbel", 3
4713, "Karl-Heinz", 1
Tabelle "Beruf" mit den Feldern "ID" (Zahl), "Beruf" (Text) und dem Inhalt
1, "Fachinformatiker"
3, "Opfer"
5, "Zitronenfalter"
Foreignkey-Beziehnung: Tabelle "Azubi" ist "Child" vom "Parent" "Berufe" mit
Ein ON DELETE CASCADE dagegen würde bewirken: wenn im Parent "Berufe" der Satz ID=1, Beruf="Fachinformatiker" gelöscht wird, automatich auch alle Child-Sätze in "Azubi" gelöscht werden, die die ID=1 verwenden. Das willst du sicher nicht.
Eine Text-Änderung der ID01 "Fachinformatiker" in "Fachinformatiker/-in" ist vollkommen uninteressant für den definierten Foreign-Key, genau deshalb haben sich doch schlaue Menschen diese Mimik ausgedacht.
Zum Thema "bestehenden Foreign Key ändern mit ALTER" -> nein, geht nicht.
bestehenden FK droppen und neu anlegen.
Wenn ich deine Tabellenstruktur vollkommen falsch verstanden habe, dann beschreibe deine Soll-Mimik bitte mal mit auch je drei Beispielsätzen.
Grüße
Biber
ich fürchte, irgendetwas hast du mit den Foreign-Key-Möglichkeiten falls verstanden.
ALTER TABLE `berufsbezeichnung` ADD FOREIGN KEY ( `ID` ) REFERENCES `intranet`.`azubi` > (`fk_berufsbezeichnung` ) ON DELETE CASCADE ON UPDATE RESTRICT ;
Bist du dir sicher, dass du richtig zugeordnet hast, wer denn nun "Parent" und wer "Child" in doeser Beziehung sein sollte?
Vielleicht verstehe ich deine Tabellenstruktur ja falsch, einleuchtend wäre sie IMHO so:
Tabelle "Azubi" mit (u.a.) den Feldern "ID", "Name", ..."fk_berufeID". Wobei "fk_berufe_id" eine Zahl ist.
Inhalt z.B.
4711, "Klaus", 1
4712, "Bärbel", 3
4713, "Karl-Heinz", 1
Tabelle "Beruf" mit den Feldern "ID" (Zahl), "Beruf" (Text) und dem Inhalt
1, "Fachinformatiker"
3, "Opfer"
5, "Zitronenfalter"
Foreignkey-Beziehnung: Tabelle "Azubi" ist "Child" vom "Parent" "Berufe" mit
ALTER TABLE `azubi` ADD FOREIGN KEY ( `fk_berufe_ID` ) REFERENCES `intranet`.`berufe` (`ID` ) ON DELETE RESTRICT ;
- die "berufe"-Tabellenwerte müssen vorhanden sein, bevor ein gültiger "Azubi"-Datensatz angelegt werden kann, denn
- jeder Azubi muss eine der vorhandenen "Berufe"-IDs erhalten
- in der "Berufe"-Tabelle dürfen natürlich auch Datensätze wie ID=5/"Zitronenfalter" sein, die nicht von real existierenden Azubis ausgeübt werden
- kein Datensatz in "Berufe" darf gelöscht werden, wenn die Berufe-ID noch im Child "Berufe" verwendet wird - das stellt die o.a. Constraint sicher mit ON DELETE RESTRICT
Ein ON DELETE CASCADE dagegen würde bewirken: wenn im Parent "Berufe" der Satz ID=1, Beruf="Fachinformatiker" gelöscht wird, automatich auch alle Child-Sätze in "Azubi" gelöscht werden, die die ID=1 verwenden. Das willst du sicher nicht.
Eine Text-Änderung der ID01 "Fachinformatiker" in "Fachinformatiker/-in" ist vollkommen uninteressant für den definierten Foreign-Key, genau deshalb haben sich doch schlaue Menschen diese Mimik ausgedacht.
Zum Thema "bestehenden Foreign Key ändern mit ALTER" -> nein, geht nicht.
bestehenden FK droppen und neu anlegen.
ALTER TABLE child DROP foreign key xy;ALTER TABLE child Add foreign key xy (childfeld] REFERENCES parenttable (parentfeld) ON DELETE RESTRICT
Wenn ich deine Tabellenstruktur vollkommen falsch verstanden habe, dann beschreibe deine Soll-Mimik bitte mal mit auch je drei Beispielsätzen.
Grüße
Biber