2017-02-06 1 views
0

다음 쿼리를 실행하는 동안ON CASCADE UPDATE의 올바른 사용?

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

나는 다음과 같은 오류가 나타납니다

비행 :

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; 

다음

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 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 엔진 INNODB 상태 사용하십시오 두 곳에서 감사를 업데이트 할 필요가있다 foriegn 키 로 두 번째 테이블에서 defind [flno] 열이 있기 때문에 – philipxy

+0

[mcve]를 (를) 읽고 행동하십시오. 예 : FlightInstance DDL, 입력, 출력 및 원하는 출력. FlightLegInstance (FLNO, ...) FK to FlightInstance & FlightInstance FK (FLNO)에서 Flight로 이동하는 경우 (FLNO) Flight는 중복됩니다. FlightLegInstance가 FlightLeg에 FK (FLNO, Seq)를 갖지 않아야합니까? PS [두 테이블 사이에서 상위 테이블이나 하위 테이블의 동일한 열에 대해 작동하는 여러 ON UPDATE CASCADE 절을 정의하지 마십시오.] (https://dev.mysql.com/doc/refman/5.7/en/ create-table-foreign-keys.html) – philipxy

답변

0

은 작동하지 않습니다.
관련 문제