3

我收到一个奇怪的错误。我有一张桌子animals,我想放下它。由于外键约束失败,我无法删除表。我知道在删除表之前我必须删除外键。问题是这个表没有外键。我已经放弃了它们。SQLyog 反映它们已被删除。但我仍然可以在信息架构中找到它们。好像我把钥匙掉到一半了。

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

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

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

1 回答 1

15

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

重要的是还有其他带有外键引用的表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 表空间文件,然后重新启动并重新导入转储的数据。这将消除表空间损坏的任何可能性。

于 2014-02-03T19:51:58.403 回答