我收到以下错误消息:
第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表之外,数据库是空的。
如果数据库中没有其他对象,那么它怎么可能有子行呢?据我所知,InnoDB不允许在其他模式上使用外键,对吗?
(我甚至可以运行一个RENAME TABLE area TO something_else命令:-?)
发布于 2010-07-26 12:58:22
有两种可能性:
您可以通过在删除失败后执行“显示引擎INNODB状态”来查看它是哪个表(反正是其中之一)。
如果结果是后一种情况,如果可以的话,我会转储和恢复整个服务器。
MySQL 5.1及更高版本将在错误消息中给出带有FK的表的名称。
发布于 2013-11-07 20:06:37
根据需要,现在作为答案..。
当使用MySQL查询浏览器或phpMyAdmin时,似乎为每个查询(bugs.mysql.com/bug.php?id=8280)打开了一个新连接,因此有必要在一个查询中编写所有drop语句,例如。
SET FOREIGN_KEY_CHECKS=0;
DROP TABLE my_first_table_to_drop;
DROP TABLE my_second_table_to_drop;
SET FOREIGN_KEY_CHECKS=1; 在这里SET FOREIGN_KEY_CHECKS=1作为额外的安全措施..。
发布于 2010-07-26 12:09:00
禁用外键检查
SET FOREIGN_KEY_CHECKS=0https://stackoverflow.com/questions/3334619
复制相似问题