2016-10-03 6 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

問題を絞り込むために、一度に1つのSQL文を実行すると便利です。 – jdigital

答えて

0

上記のコメントに記載されているcostの問題を無視した場合、落としたときに安全に行うために作成の予約順に行う必要があるため、1217エラーがよく発生します。

テーブルA、B、C、DをFKの位置で連続して作成すると、D、C、B、Aの順にそれらをドロップする必要があります。

これは、子にFKが強制的に存在する場合、親を削除できないためです。そして最初にチロレンを落とすことによって、エラーは現れません。