无法删除mysql表

无法删除mysql表,mysql,sql,sqlyog,drop-table,Mysql,Sql,Sqlyog,Drop Table,我犯了一个奇怪的错误。我有一张桌子动物,我正试图放下它。我无法删除该表,因为外键约束失败。我知道我必须在放下桌子之前放下外键。问题是这个表没有外键。我已经把它们扔了。SQLyog反映它们已被删除。但我仍然可以在信息模式中找到它们。好像我把钥匙掉了一半什么的 如何在不删除数据库的情况下删除此表?我需要重新设置这个表的键,我只想删除它并重新创建它 编辑: 以下是来自SQL的错误消息: Cannot delete or update a parent row: a foreign key constr

我犯了一个奇怪的错误。我有一张桌子
动物
,我正试图放下它。我无法删除该表,因为外键约束失败。我知道我必须在放下桌子之前放下外键。问题是这个表没有外键。我已经把它们扔了。SQLyog反映它们已被删除。但我仍然可以在信息模式中找到它们。好像我把钥匙掉了一半什么的

如何在不删除数据库的情况下删除此表?我需要重新设置这个表的键,我只想删除它并重新创建它

编辑: 以下是来自SQL的错误消息:

Cannot delete or update a parent row: a foreign key constraint fails

animals
是否有外键并不重要。如果表中有外键,您无论如何都可以删除它

重要的是,还有其他表具有引用动物的外键

以下是您可以检查的方法:

SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE (REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME) = ('mydatabase', 'animals');

请回复您的评论:

我从未听说过外键不可见但仍能防止桌子掉落的情况。但我想这是可能的

如果这样做,您可以放下桌子:

mysql> SET FOREIGN_KEY_CHECKS=0;
mysql> DROP TABLE animals;
mysql> SET FOREIGN_KEY_CHECKS=1;
但是,如果InnoDB表空间已经处于一种奇怪的状态,我无法预测会出现什么问题


最终,您可能需要做的是使用mysqldump转储所有InnoDB表,然后关闭MySQL守护程序,删除InnoDB表空间文件,然后重新启动并重新导入转储的数据。这将消除任何表空间损坏的可能性。

您可以发布错误消息吗?其他表是否有对
animals
表的FK引用?这就是为什么你不能放弃它。我明白这个概念。奇怪的是,您提供的查询(在发布之前运行了一个非常简单的查询)返回一个空集。好像没有依赖关系。我还是没能放下桌子。一定是某个地方的腐败。我像你描述的那样转储、关闭、重新启动和导入,现在我可以放下桌子了。我对mysql并不陌生,所以我理解它是如何工作的,但这让我陷入了一个循环。非常感谢。