2016-10-03 155 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生效,父母不能被放弃。首先放弃孩子,错误就不会出现。