2017-02-06 43 views
0

試圖運行下面的查詢:正確使用ON CASCADE UPDATE?

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

我收到以下錯誤:

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) 

以下是我創作的查詢:

航班:

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; 

FlightLeg:

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; 

我會假設該錯誤是在FlightLegInstance兩個FK定義之一,但我不知道。誰能幫我這個?

謝謝。

+0

請使用SHOW ENGINE INNODB STATUS不只是工作。 – philipxy

+0

請閱讀並按照[mcve]進行操作。例如給FlightInstance DDL,輸入,輸出和所需的輸出。此外,如果FlightInstance(FLNO,...)FK與FlightInstance&(如你所假設的那樣)FlightInstance FK(FLNO)與Flight相同,則(FLNO)對於Flight也是多餘的。 FlightLegInstance不應該有FK(FLNO,Seq)到FlightLeg嗎? PS [在兩個表之間,不要定義幾個在父表或子表中的同一列上操作的ON UPDATE CASCADE子句。](https://dev.mysql.com/doc/refman/5.7/en/創建表,外商keys.html) – philipxy

回答

0

這一點,因爲你必須在第二個表defind [flno]列foriegn關鍵 這個問題的解決辦法是你必須在這兩個地方進行更新 感謝