Foreign Key Problem (MySQL & PHPMyAdmin): #1452 - Cannot add or update a child row

thowi

thowi

Aktives Mitglied
Thread Starter
Dabei seit
14.10.2007
Beiträge
560
Reaktionspunkte
33
Hallo zusammen,

ich habe bei einer Datenbank das Problem, dass ich einen Fremdschlüssel nicht korrekt zuordnen kann.
Folgendes wollte ich umsetzen:
Code:
ALTER TABLE  `Produkte` ADD FOREIGN KEY (  `Eigentümer` ) REFERENCES  `d0172e22`.`Personen` (
`PersID`
) ON DELETE RESTRICT ON UPDATE CASCADE ;

Dabei erscheint folgende Fehlermeldung:
Code:
#1452 - Cannot add or update a child row: a foreign key constraint fails (`d0172e22`.<result 2 when explaining filename '#sql-6b0_7d619e'>, CONSTRAINT `#sql-6b0_7d619e_ibfk_4` FOREIGN KEY (`Eigentümer`) REFERENCES `Personen` (`PersID`) ON UPDATE CASCADE)

Die Tabelle "Produkte" sieht folgendermaßen aus:
Code:
CREATE TABLE IF NOT EXISTS `Produkte` (
  `ProdID` int(11) NOT NULL AUTO_INCREMENT,
  `Foto` mediumblob,
  `HerstID_Hersteller` int(11) NOT NULL,
  `Bezeichnung` text COLLATE latin1_german1_ci,
  `HerstellerProduktLink` text COLLATE latin1_german1_ci,
  `KatID_Kategorie` int(11) NOT NULL,
  `Anzahl` int(11) DEFAULT NULL,
  `HändlerID_Händler` int(11) NOT NULL,
  `GekauftAm` date DEFAULT NULL,
  `Kaufpreis` decimal(11,0) DEFAULT NULL,
  `HaltbarBis` date DEFAULT NULL,
  `PackLänge` decimal(11,0) DEFAULT NULL,
  `PackBreite` decimal(11,0) DEFAULT NULL,
  `PackHöhe` decimal(11,0) DEFAULT NULL,
  `GewichtGramm` decimal(11,0) DEFAULT NULL,
  `Eigentümer` int(11) NOT NULL,
  PRIMARY KEY (`ProdID`),
  UNIQUE KEY `HerstID_Hersteller` (`HerstID_Hersteller`),
  UNIQUE KEY `KatID_Kategorie` (`KatID_Kategorie`),
  UNIQUE KEY `HändlerID_Händler` (`HändlerID_Händler`),
  UNIQUE KEY `Eigentümer` (`Eigentümer`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=2 ;

Die Tabelle "Personen" sieht folgendermaßen aus:
Code:
CREATE TABLE IF NOT EXISTS `Personen` (
  `PersID` int(11) NOT NULL AUTO_INCREMENT,
  `Vorname` text COLLATE latin1_german1_ci,
  `Nachname` text COLLATE latin1_german1_ci,
  PRIMARY KEY (`PersID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_german1_ci AUTO_INCREMENT=1 ;

Steh ich grade total aufm Schlauch, oder kann sich da jemand von euch einen Reim drauf machen?

Wäre dankbar für einen Tipp!

LG, thowi
 
Ha, Problem hat sich erledigt.
Komischerweise konnte ich trotz NOT NULL bei den Produkten einen Datensatz mit Eigentümer = 0 (aus vorherigen Tests) anlegen. Das mochte er logischerweise nicht... jetzt mal den Datensatz angepasst und siehe da, jetzt geht auch der foreign key.
 
NOT NULL gibt ja auch an, dass der Wert nicht leer sein darf und nicht, dass keine 0 drin stehen darf :)
 
Stimmt, hast du Recht. Dann war wohl der Bezug einfach nicht da, weil es keinen Primärschlüssel in der "Personen" Tabelle mit dem Wert 0 gibt.
 
Zurück
Oben Unten