MySQL - Ошибка ограничения внешнего ключа - PullRequest
1 голос
/ 19 ноября 2011

Я видел эту проблему много времени на форумах, но я не могу решить эту проблему для моей конкретной ситуации. Я получаю следующую ошибку на простой вставке.

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. Я проверил все в моей БД на наличие опечаток и т. Д., И я не понимаю, в чем проблема. Я был бы очень признателен, если кто-нибудь может помочь.

Спасибо

B

1 Ответ

2 голосов
/ 19 ноября 2011

Обе ваши таблицы должны использовать механизм innoDb, как вы можете прочитать из официального документа .

Обе таблицы должны быть таблицами InnoDB, и они не должны быть ВРЕМЕННЫМИ таблицы.

Для таблицы рейса у вас есть ENGINE = MyISAM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...