Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Fremdschlüssel zwischen zwei Tabellen ändern

Frage Entwicklung Datenbanken

Mitglied: simon-ni

simon-ni (Level 1) - Jetzt verbinden

17.04.2013 um 16:12 Uhr, 3280 Aufrufe, 2 Kommentare

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.

01.
ALTER TABLE `berufsbezeichnung` ADD FOREIGN KEY ( `ID` ) REFERENCES `intranet`.`azubi` (`fk_berufsbezeichnung` ) ON DELETE CASCADE ON UPDATE RESTRICT ; 
02.
  
03.
#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
Mitglied: Biber
18.04.2013, aktualisiert um 16:21 Uhr
Moin simon-ni,

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
Bitte warten ..
Mitglied: simon-ni
19.04.2013 um 12:16 Uhr
Hallo Biber,

du hast das genau richtig verstanden. Ich hab ihn gelöscht und wieder neu angelegt, danach hat es funktioniert.

Ich hab mir auch gedacht das die Anderung unerheblich sein sollte. Warscheinlich ist mir beim Anlegen ein Fehler unterlaufen.

Danke für die ausfürhliche Antwort, das hilft hoffentlich nicht nur mir weiter.

Gruß
Nico
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(2)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
Access Verknüpfte Tabellen Passwort ändern

Frage von mijacd zum Thema Microsoft Office ...

Erkennung und -Abwehr
Lokale Virenprüfstation : Windows 10: Ändern von Einstellungen verhinden (5)

Frage von TryAndSolve zum Thema Erkennung und -Abwehr ...

Humor (lol)
Der Unterschied zwischen USA und USB

Link von BirdyB zum Thema Humor (lol) ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...