2017-02-06 2 views
0

Bei dem Versuch, die folgende Abfrage ausführen:Richtige Verwendung von ON CASCADE UPDATE?

UPDATE Flight 
SET FLNO = '1001' 
WHERE FLNO = '1000'; 

ich die folgende Fehlermeldung:

ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`user/FlightLegInstance`, CONSTRAINT `FlightLegInstance_ibfk_1` FOREIGN KEY (`FLNO`) REFERENCES `FlightLeg` (`FLNO`) ON UPDATE CASCADE) 

Die folgenden sind meine Schöpfung Anfragen:

Flug:

CREATE TABLE Flight (
FLNO INTEGER NOT NULL, 
Meal varchar(50) NOT NULL, 
Smoking char(1) NOT NULL, 
PRIMARY KEY (FLNO) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

FlugLeg:

CREATE TABLE FlightLeg (
FLNO INTEGER NOT NULL, 
Seq char(25) NOT NULL, 
FromA char(3) NOT NULL, 
ToA char(3) NOT NULL, 
DeptTime DATETIME NOT NULL, 
ArrTime DATETIME NOT NULL, 
Plane INTEGER NOT NULL, 
PRIMARY KEY (FLNO, Seq), 
FOREIGN KEY (FLNO) REFERENCES Flight(FLNO) ON UPDATE CASCADE, 
FOREIGN KEY (FromA) REFERENCES Airport(Code), 
FOREIGN KEY (ToA) REFERENCES Airport(Code) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

FlightLegInstance:

CREATE TABLE FlightLegInstance (
Seq char(25) NOT NULL, 
FLNO INTEGER NOT NULL, 
FDate DATE NOT NULL, 
ActDept DATETIME NOT NULL, 
ActArr DATETIME NOT NULL, 
Pilot INTEGER NOT NULL, 
PRIMARY KEY (Seq, FLNO, FDate), 
FOREIGN KEY (FLNO) REFERENCES FlightLeg(FLNO) ON UPDATE CASCADE, 
FOREIGN KEY (FLNO, FDate) REFERENCES FlightInstance(FLNO, FDate) ON UPDATE CASCADE 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

Ich würde davon ausgehen, dass der Fehler in einer der beiden FK Definitionen von FlightLegInstance ist, aber ich bin nicht sicher. Kann mir jemand dabei helfen?

Danke.

+0

Bitte SHOW ENGINE BDB STATUS verwenden. – philipxy

+0

Bitte lesen und handeln Sie auf [mcve]. ZB geben Sie FlightInstance DDL, Eingabe, Ausgabe und gewünschte Ausgabe. Auch die (FLNO) to Flight ist redundant, wenn Sie eine FlightLegInstance (FLNO, ...) FK zu FlightInstance & (wie Sie es vermutlich tun) eine FlightInstance FK (FLNO) zum Flight haben. Sollte FlightLegInstance nicht FK (FLNO, Seq) zu FlightLeg haben? PS [Definieren Sie zwischen zwei Tabellen nicht mehrere ON UPDATE CASCADE-Klauseln, die in derselben Spalte in der übergeordneten Tabelle oder in der untergeordneten Tabelle ausgeführt werden.] (Https://dev.mysql.com/doc/refman/5.7/en/ create-table-foreign-keys.html) – philipxy

Antwort

0

dies nicht funktioniert, nur weil Sie defind haben [flno] Spalte in der zweiten Tabelle als foriegn Schlüssel die Lösung dieses Problems ist, dass Sie es an beiden Orten dank aktualisieren

Verwandte Themen