Top-Themen

Aktuelle Themen (A bis Z)

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, 3574 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 ..
Ähnliche Inhalte
Datenbanken
MySQL zwei Tabellen zusammenführen
gelöst Frage von RedBullmachtfitDatenbanken10 Kommentare

Hallo, ich habe in MySQL eine Artikel-Tabelle in welcher alle Artikel gespeichert sind sowie eine art_preise-Tabelle, in welcher nur ...

Datenbanken
SQL - Zwei Tabellen zusammenführen
gelöst Frage von Memo66Datenbanken6 Kommentare

Hallo, ich bin dabei SQL zu lernen und habe mir dazu eine Fußballdatenbank angelegt. Ich habe nun folgendes Problem ...

Microsoft Office
Excel Filter Vergleich zweier Tabellen
gelöst Frage von Dr.CornwallisMicrosoft Office5 Kommentare

Hallo zusammen, ich möchte 2 Tabellen in einer Excel Datei vergleichen, dabei sollen die Werte aus der Tabelle "ausgeschiedene ...

Microsoft Office
Access Verknüpfte Tabellen Passwort ändern
Frage von mijacdMicrosoft Office

Hallo zusammen, wir haben bei uns im Haus mehrere Accessdatenbanken die Verknüpfte Tabellen von einem SQL Server beinhalten. Nun ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 23 StundenWindows 102 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 1 TagSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 1 TagInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
Windows Server
GPO nur für bestimmte Computer
Frage von Leo-leWindows Server13 Kommentare

Hallo Forum, gern würde ich ein Robocopy script per Bat an eine GPO hängen. Wichtig wäre aber dort der ...

Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server13 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...

Windows Tools
Software-Tool zum Entfernen von bösartigem Windows
Frage von emeriksWindows Tools11 Kommentare

Hi, siehe Betreff hat das jemals irgendjemand schonmal sinnvoll eingesetzt? (MRT) E.

Router & Routing
OpenWRT bzw. L.E.D.E auf Buffalo WZR-HP-AG300H - update
gelöst Frage von EpigeneseRouter & Routing11 Kommentare

Guten Tag, ich habe auf einem Buffalo WZR-HP-AG300H die alternative Firmware vom L.E.D.E Projekt geflasht. Ich bin es von ...