2011-11-19 145 views
1

我在論壇上看到了這個問題的時間加載,但我似乎無法解決我的特定情況的問題。 我在一個簡單的插入上收到以下錯誤。MySQL - 外鍵約束錯誤

Cannot add or update a child row: a foreign key constraint fails (`bag_track`.`job`, CONSTRAINT `fk_JOB_FLIGHT1` FOREIGN KEY (`FLIGHT_ID`) REFERENCES `FLIGHT` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION) 

這裏是我的表定義: 飛行表

CREATE TABLE IF NOT EXISTS `BAG_TRACK`.`FLIGHT` (
`ID` INT NOT NULL AUTO_INCREMENT , 
`FLIGHT_NUM` VARCHAR(15) NOT NULL , 
`ORIGIN` VARCHAR(45) NOT NULL , 
`ARRIVAL_TIME` DATETIME NOT NULL , 
`STATUS` VARCHAR(45) NOT NULL , 
`CAROUSEL_ID` INT NOT NULL , 
`GATE_ID` INT NOT NULL , 
`AIRCRAFT_TYPE_ID` INT NOT NULL , 
PRIMARY KEY (`ID`) , 
INDEX `fk_FLIGHT_CAROUSEL1` (`CAROUSEL_ID` ASC) , 
INDEX `fk_FLIGHT_GATE1` (`GATE_ID` ASC) , 
INDEX `fk_FLIGHT_AIRCRAFT_TYPE1` (`AIRCRAFT_TYPE_ID` ASC) , 
CONSTRAINT `fk_FLIGHT_CAROUSEL1` 
FOREIGN KEY (`CAROUSEL_ID`) 
REFERENCES `BAG_TRACK`.`CAROUSEL` (`ID`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION, 
CONSTRAINT `fk_FLIGHT_GATE1` 
FOREIGN KEY (`GATE_ID`) 
REFERENCES `BAG_TRACK`.`GATE` (`ID`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION, 
CONSTRAINT `fk_FLIGHT_AIRCRAFT_TYPE1` 
FOREIGN KEY (`AIRCRAFT_TYPE_ID`) 
REFERENCES `BAG_TRACK`.`AIRCRAFT_TYPE` (`ID`) 
ON DELETE NO ACTION 
ON UPDATE NO ACTION) 
ENGINE = MyISAM 
DEFAULT CHARACTER SET = utf8; 

工作表

CREATE TABLE IF NOT EXISTS `BAG_TRACK`.`JOB` (
    `ID` INT NOT NULL AUTO_INCREMENT , 
    `STATUS` VARCHAR(45) NOT NULL , 
    `LONGITUDE` FLOAT NULL , 
    `LATITUDE` FLOAT NULL , 
    `SPEED` VARCHAR(45) NULL , 
    `JOB_DATE` DATE NULL , 
    `START_TIME` TIME NULL , 
    `TOTAL_TIME` DOUBLE NULL , 
    `COMPLETION_DATE` DATE NULL , 
    `USER_ID` INT NOT NULL , 
    `ROUTE_ID` INT NOT NULL , 
    `FLIGHT_ID` INT NOT NULL , 
    PRIMARY KEY (`ID`, `FLIGHT_ID`) , 
    INDEX `fk_JOB_USER1` (`USER_ID` ASC) , 
    INDEX `fk_JOB_ROUTE1` (`ROUTE_ID` ASC) , 
    INDEX `fk_JOB_FLIGHT1` (`FLIGHT_ID` ASC) , 
    CONSTRAINT `fk_JOB_USER1` 
    FOREIGN KEY (`USER_ID`) 
    REFERENCES `BAG_TRACK`.`USER` (`ID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_JOB_ROUTE1` 
    FOREIGN KEY (`ROUTE_ID`) 
    REFERENCES `BAG_TRACK`.`ROUTE` (`ID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_JOB_FLIGHT1` 
    FOREIGN KEY (`FLIGHT_ID`) 
    REFERENCES `BAG_TRACK`.`FLIGHT` (`ID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

我想這個簡單的插入

insert into job (status, USER_ID, ROUTE_ID, FLIGHT_ID) VALUES ('UNLOADING', 1, 1, 2) 

,並得到錯誤以上。 我在我的飛行表中有主鍵1的數據。 我已經檢查過我的數據庫中的所有錯誤等等,我不知道問題是什麼,我很感激任何人都可以提供幫助。

感謝

回答

2

無論你的表格必須使用InnoDB引擎,你可以從official doc讀取。

這兩個表必須是InnoDB表,它們不能是TEMPORARY 表。

對於飛行表,您需要改爲ENGINE = MyISAM

+0

斑點。感謝您的幫助奧雷利奧。真的很感激它。 –

+0

@BrianBoyle很高興幫助你。 –