внешний ключ в MySQL Workbench - PullRequest
       36

внешний ключ в MySQL Workbench

1 голос
/ 23 февраля 2012

Я новичок в MySQL и у меня простой вопрос. у меня есть три таблицы в моей схеме (книжный магазин). Я хочу иметь отношения между ними. мои таблицы: книги (book_id, book_name, book_entity), customer (customer_id, customer_name), заказы (book_id, customer_id, количество). я установил внешний ключ в таблице заказов следующим образом:

имена внешних ключей (book_id и customer_id), справочная таблица ( «Книжный магазин», «книга» 'Книжный магазин', 'клиент')

сначала я заполняю таблицу книг, но когда я пытаюсь вставить данные в таблицу клиентов, у меня появляется следующая ошибка:

  ERROR 1452: Cannot add or update a child row: a foreign key constraint fails (`bookshop`.`customer`, CONSTRAINT `customer_id` FOREIGN KEY (`customer_id`) REFERENCES `order` (`customer_id`) ON DELETE NO ACTION ON UPDATE NO ACTION)

SQL Statement:

INSERT INTO `bookshop`.`customer` (`customer_id`, `customer_name`, `customer_address`) VALUES (2, 'helen', 'newyork')

что мне делать?

мои коды:


-- Table `bookshop`.`books`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `bookshop`.`books` (

  `book_id` INT NOT NULL ,

  `book_name` VARCHAR(45) NOT NULL ,

  `book_price` DECIMAL NOT NULL ,

  `book_entity` INT NOT NULL ,

  PRIMARY KEY (`book_id`) )

ENGINE = InnoDB;





-- -----------------------------------------------------

-- Table `bookshop`.`customer`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `bookshop`.`customer` (

  `customer_id` INT NOT NULL ,

  `customer_name` VARCHAR(45) NOT NULL ,

  `customer_address` VARCHAR(45) NOT NULL ,

  PRIMARY KEY (`customer_id`) )

ENGINE = InnoDB;





-- -----------------------------------------------------

-- Table `bookshop`.`orders`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `bookshop`.`orders` (

  `book_id` INT NOT NULL ,

  `customer_id` INT NOT NULL ,

  `quantity` INT NOT NULL ,

  INDEX `book_id` (`book_id` ASC) ,

  INDEX `customer_id` (`customer_id` ASC) ,

  CONSTRAINT `book_id`

    FOREIGN KEY (`book_id` )

    REFERENCES `bookshop`.`books` (`book_id` )

    ON DELETE NO ACTION

    ON UPDATE NO ACTION,

  CONSTRAINT `customer_id`

    FOREIGN KEY (`customer_id` )

    REFERENCES `bookshop`.`customer` (`customer_id` )

    ON DELETE RESTRICT

    ON UPDATE RESTRICT)

ENGINE = InnoDB;

Ответы [ 2 ]

0 голосов
/ 23 февраля 2012

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

0 голосов
/ 23 февраля 2012

Ваше заявление о внешнем ключе, похоже, не соответствует действительности, укажите оператор, который вы использовали для создания внешнего ключа.

Однако, похоже, вы создали внешний ключ, который позволяет вам вставить клиента, только если существует заказ для клиента. Вы, вероятно, хотите сделать это наоборот.

...