2016-10-03 4 views
0

Я получаю сообщение об ошибке, которое утверждает: Error Code: 1217. Cannot delete or update a parent row: a foreign key constraint failsОграничение внешнего ключа не удается (MySQL)

Не знаю, почему я получаю эту ошибку. Любая подсказка?

код ниже:

-- DROP EXISTING TABLES -- 

DROP TABLE IF EXISTS `category`; 
DROP TABLE IF EXISTS `format`; 
DROP TABLE IF EXISTS `customer`; 
DROP TABLE IF EXISTS `rentals`; 
DROP TABLE IF EXISTS `videos`; 

-- CREATE CATEGORY TABLE -- 
CREATE TABLE `category` (
    `category_id` int(10) NOT NULL, 
    PRIMARY KEY (`category_id`) 
) ENGINE = InnoDB DEFAULT CHARSET = utf8; 

-- CREATE FORMAT TABLE -- 
CREATE TABLE `format` (
    `format_id` int(10) NOT NULL, 
    PRIMARY KEY (`format_id`) 
) ENGINE = InnoDB DEFAULT CHARSET = utf8; 

-- CRTEATE VIDEOS TABLE -- 
CREATE TABLE `videos` (
    `video_id` int(10) NOT NULL, 
    `title` varchar(50) NOT NULL, 
    `format_id` int(10) NOT NULL, 
    `cost` double NOT NULL, 
    `category_id` int(10) NOT NULL, 
    PRIMARY KEY (`video_id`), 
    CONSTRAINT `fk_video_format` FOREIGN KEY (`format_id`) REFERENCES `format` (`format_id`), 
    CONSTRAINT `fk_video_category` FOREIGN KEY (`category_id`) REFERENCES `category` (`category_id`) 
) ENGINE = InnoDB DEFAULT CHARSET = utf8; 

-- CREATE CUSTOMER TABLE -- 
CREATE TABLE `customer` (
    `customer_id` int(10) NOT NULL, 
    `last_name` varchar(50) NOT NULL, 
    `first_name` varchar(50) NOT NULL, 
    `address` varchar(100) NOT NULL, 
    `city` varchar(50) NOT NULL, 
    `state` varchar(10) NOT NULL, 
    `zip` int(10) NOT NULL, 
    PRIMARY KEY (`customer_id`) 
) ENGINE = InnoDB DEFAULT CHARSET = utf8; 

-- CREATE RENTALS TABLE -- 
CREATE TABLE `rentals` (
    `rental_id` int(10) NOT NULL, 
    `date_out` datetime NOT NULL, 
    `date_due` datetime NOT NULL, 
    `date_in` datetime NOT NULL, 
    `delivery_status` varchar(50), 
    `cost` double NOT NULL, 
    `late_fee` double NOT NULL, 
    `customer_id` int(10) NOT NULL, 
    `video_id` int(10) NOT NULL, 
    PRIMARY KEY (`rental_id`), 
    CONSTRAINT `fk_video_customer` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`customer_id`), 
    CONSTRAINT `fk_video_cost` FOREIGN KEY (`cost`) REFERENCES `videos` (`cost`), 
    CONSTRAINT `fk_video_id` FOREIGN KEY (`video_id`) REFERENCES `videos` (`video_id`) 
) ENGINE = InnoDB DEFAULT CHARSET = utf8; 

Я считаю, что все совпадает ключ и внешний ключ-накрест. Форматирование выглядит корректно. Если я не делаю что-то совершенно неправильное здесь.

+0

'fk_video_cost ссылки видео (стоимость)' - вы действительно собираетесь иметь стоимость быть ключом? – jdigital

+0

@jdigital О! Благодаря! Я только начал изучать MySQL вчера и пытаюсь совершенствовать свое обучение. Спасибо огромное! :) – Donson

+0

Возможно, вам будет полезно выполнить один SQL-запрос за раз, чтобы уменьшить проблемы. – jdigital

ответ

0

Игнорирование проблемы cost, описанной в комментариях выше, ошибка 1217 происходит очень часто, потому что когда вы бросаете ее, вы должны сделать это в резервном порядке созданий, чтобы сделать это безопасно.

Если вы успешно создаете таблицы A, B, C, D последовательно с FK, вам необходимо отбросить их по порядку D, C, B, A.

Это просто потому, что родителя нельзя отбросить, если у ребенка есть FK в силу. И, исключив сначала детей, ошибка не будет отображаться.