2016-10-03 154 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生效,父母不能被放棄。首先放棄孩子,錯誤就不會出現。