我有两张桌子
CREATE TABLE `category` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `item` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
categoryid` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`id`), KEY `fk_categoryid_item` (`categoryid`),
CONSTRAINT `fk_categoryid_item` FOREIGN KEY (`categoryid`)
REFERENCES `category` (`id`) ON DELETE CASCADE)
ENGINE=InnoDB DEFAULT CHARSET=utf8
在表类别中,我有一个id为2的记录。 在项目中,我有一个id = 1的记录,categoryid = 2,其中2作为引用类别表的外键。如果我使用id 2删除类别表中的行,则itemal表中categoryid为2的记录也会被删除。由于删除级联,这是预期的。但是,如果我尝试删除表类别,我会收到错误错误代码:
1217. Cannot delete or update a parent row: a foreign key constraint fails
为什么会这样?当然,设置foreign_key_checks = 0可以丢弃表。但我想知道为什么会发生这种情况我们可以删除记录,但不能删除表上的cascade删除选项。此选项仅适用于删除记录,但不适用于删除表。
我检查了文档,我找不到任何解释。
如果我遗漏了某些基本内容,或者如果您指出相关文档,那么请告诉我它会有所帮助。我正在使用MySQL 5.7。
提前致谢。