首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >伪外键约束失败

伪外键约束失败
EN

Stack Overflow用户
提问于 2010-07-26 12:06:27
回答 9查看 223.3K关注 0票数 112

我收到以下错误消息:

第40行的

错误1217 (23000):无法删除或更新父行:外键约束失败

..。当我试图放下一张桌子:

代码语言:javascript
复制
DROP TABLE IF EXISTS `area`;

..。定义如下:

代码语言:javascript
复制
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命令:-?)

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2010-07-26 12:58:22

有两种可能性:

  1. 在另一个模式( mysql术语中的“数据库”)中有一个表,其中有一个FK引用
  2. ,innodb内部数据字典与mysql
  3. 不同步。

您可以通过在删除失败后执行“显示引擎INNODB状态”来查看它是哪个表(反正是其中之一)。

如果结果是后一种情况,如果可以的话,我会转储和恢复整个服务器。

MySQL 5.1及更高版本将在错误消息中给出带有FK的表的名称。

票数 105
EN

Stack Overflow用户

发布于 2013-11-07 20:06:37

根据需要,现在作为答案..。

当使用MySQL查询浏览器或phpMyAdmin时,似乎为每个查询(bugs.mysql.com/bug.php?id=8280)打开了一个新连接,因此有必要在一个查询中编写所有drop语句,例如。

代码语言:javascript
复制
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作为额外的安全措施..。

票数 121
EN

Stack Overflow用户

发布于 2010-07-26 12:09:00

禁用外键检查

代码语言:javascript
复制
SET FOREIGN_KEY_CHECKS=0
票数 48
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3334619

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档