一尘不染

假外键约束失败

mysql

我收到此错误消息:

第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命令:-?)


阅读 259

收藏
2020-05-17

共1个答案

一尘不染

两种可能性:

  1. 在另一个架构(mysql术语中的“数据库”)中有一个表,该表具有FK参考
  2. innodb内部数据字典与mysql字典不同步。

通过在删除失败后执行“ SHOW ENGINE INNODB STATUS”,可以查看它是哪个表(无论如何是其中之一)。

如果是后一种情况,我将转储并还原整个服务器(如果可以)。

MySQL 5.1及更高版本将为您提供错误消息中带有FK的表的名称。

2020-05-17