我收到此错误消息:
第40行的错误1217(23000):无法删除或更新父行:外键约束失败
…当我尝试放置桌子时:
DROP TABLE IF EXISTS `area`;
…定义如下:
CREATE TABLE `area` ( `area_id` char(3) COLLATE utf8_spanish_ci NOT NULL, `nombre_area` varchar(30) COLLATE utf8_spanish_ci NOT NULL, `descripcion_area` varchar(100) COLLATE utf8_spanish_ci NOT NULL, PRIMARY KEY (`area_id`), UNIQUE KEY `nombre_area_UNIQUE` (`nombre_area`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
有趣的是, 我已经删除 了模式中具有外键的 所有其他表area。实际上,除了area表外,数据库是空的。
area
如果数据库中没有其他对象,怎么可能会有子行?据我所知,InnoDB不允许在其他模式上使用外键,对吗?
(我什至可以运行RENAME TABLE area TO something_else命令:-?)
RENAME TABLE area TO something_else
两种可能性:
通过在删除失败后执行“ SHOW ENGINE INNODB STATUS”,可以查看它是哪个表(无论如何是其中之一)。
如果是后一种情况,我将转储并还原整个服务器(如果可以)。
MySQL 5.1及更高版本将为您提供错误消息中带有FK的表的名称。