2017-02-02 5 views
0

У меня проблема с моим db, где я не могу вставить в него данные, он продолжает показывать мне эту ошибку: Mysql: Код ошибки: 1452. Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа завершается с ошибкой. Я не пытаюсь создавать новые внешние ключи, я просто пытаюсь вставить данные в таблицы У меня есть 4 таблицы, вот код создания ниже:Ошибка внешнего ключа MySQL при вставке в таблицы (ошибка 1452), уже создана FKs

CREATE TABLE IF NOT EXISTS `projectx`.`restaurants` (
    `restaurant_id` INT NOT NULL AUTO_INCREMENT COMMENT '', 
    `restaurant_name` VARCHAR(45) NOT NULL COMMENT '', 
    PRIMARY KEY (`restaurant_id`) COMMENT '', 
    UNIQUE INDEX `restaurant_id_UNIQUE` (`restaurant_id` ASC) COMMENT '') 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `projectx`.`table_area` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `projectx`.`table_area` (
    `area_id` INT NOT NULL AUTO_INCREMENT COMMENT '', 
    `width` INT NOT NULL COMMENT '', 
    `height` INT NOT NULL COMMENT '', 
    PRIMARY KEY (`area_id`) COMMENT '', 
    UNIQUE INDEX `area_id_UNIQUE` (`area_id` ASC) COMMENT '') 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `projectx`.`table_position` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `projectx`.`table_position` (
    `position_id` INT NOT NULL AUTO_INCREMENT COMMENT '', 
    `pos_x` INT NOT NULL COMMENT '', 
    `pos_y` INT NOT NULL COMMENT '', 
    PRIMARY KEY (`position_id`) COMMENT '', 
    UNIQUE INDEX `position_id_UNIQUE` (`position_id` ASC) COMMENT '') 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `projectx`.`restaurant_tables` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `projectx`.`restaurant_tables` (
    `id` INT NOT NULL AUTO_INCREMENT COMMENT '', 
    `table_id` INT NOT NULL COMMENT '', 
    `restaurant_id` INT NOT NULL COMMENT '', 
    `table_kind` VARCHAR(10) NULL COMMENT '', 
    `number_of_seats` INT NOT NULL COMMENT '', 
    `is_taken` TINYINT(1) NOT NULL COMMENT '', 
    `table_area_id` INT NOT NULL COMMENT '', 
    `table_position_id` INT NOT NULL COMMENT '', 
    PRIMARY KEY (`id`, `restaurant_id`, `table_area_id`, `table_position_id`) COMMENT '', 
    UNIQUE INDEX `id_UNIQUE` (`id` ASC) COMMENT '', 
    INDEX `fk_restaurant_tables_restaurants_idx` (`restaurant_id` ASC) COMMENT '', 
    INDEX `fk_restaurant_tables_table_area1_idx` (`table_area_id` ASC) COMMENT '', 
    INDEX `fk_restaurant_tables_table_position1_idx` (`table_position_id` ASC) COMMENT '', 
    CONSTRAINT `fk_restaurant_tables_restaurants` 
    FOREIGN KEY (`restaurant_id`) 
    REFERENCES `projectx`.`restaurants` (`restaurant_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_restaurant_tables_table_area1` 
    FOREIGN KEY (`table_area_id`) 
    REFERENCES `projectx`.`table_area` (`area_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `fk_restaurant_tables_table_position1` 
    FOREIGN KEY (`table_position_id`) 
    REFERENCES `projectx`.`table_position` (`position_id`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

Вставьте код:

insert into restaurant_tables(id,table_id,restaurant_id,table_kind,number_of_seats,is_taken,table_area_id,table_position_id) values 
(1,1,1,'square',4,0,1,1); 

В принципе идея состоит в том, чтобы один ресторан мог иметь больше таблиц, и каждая таблица должна иметь только одну ширину, высоту и pos_x, pos_y. Что я делаю неправильно здесь? Является ли таблица макета и ограничений хорошими? Любая помощь была бы потрясающей! Благодаря!

+1

Возможный дубликат [Ошибка Mysql 1452 - Невозможно добавить или обновить дочернюю строку: сбой ограничения внешнего ключа) (http://stackoverflow.com/questions/1253459/mysql-error-1452-cannot-add-or- update-a-child-row-a-foreign-key-constraint-fa) – miken32

+0

Не жалуется, что вы пытаетесь добавить новый FK, он говорит, что данные, которые вы вставляете, будут нарушать существующее ограничение FK. В таблице ресторанов есть запись с рестораном_id = 1? Как насчет табличных областей и таблиц позиций? Вы не можете ссылаться на идентификатор в этих таблицах из того, что вы пытаетесь вставить в tables_tables, если только этот идентификатор уже существует в таблицах, помеченных ограничениями FK. –

+0

В таблице ресторанов у меня есть одна запись с рестораном_id = 1 и name = bla, то же самое касается области и таблицы позиций. Это ответ на ваш вопрос? Прошу прощения, но я не знаю много о sql, кроме основ, мне не нужно было многого ... – vibetribe93

ответ

1

Как указано в сценарии определения таблиц, у вас есть 3 FKs от restaurant_tables до 3 других таблиц. Для того, чтобы ваши записи, чтобы быть действительным, запись (строка) не может существовать в restaurant_tables, если оно не соответствует 3 FK условиям:

  1. из restaurant_id FK от restaurant_tables к restaurants. должна быть строка с restaurant_id = 1 в таблице restaurants. (относительно вашего кода вставки). в противном случае указатель на целевую таблицу (рестораны) не сможет ссылаться на действительную строку, что делает вашу запись менее значимой.
  2. Должно быть число с area_id = 1 в table_area относительно fk_restaurant_tables_table_area1 & ваш код вставки.
  3. Должно быть в строке position_id в table_position относительно fk_restaurant_tables_table_position1 & ваш код вставки.

Ошибка здесь возникает из-за нарушения внешних ключей & не имеет ничего общего с MySQL Workbench.

Смежные вопросы