无法删除mysql表

时间:2014-02-03 19:46:43

标签: mysql sql sqlyog drop-table

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

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

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

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

1 个答案:

答案 0 :(得分:11)

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表空间文件,然后重启并重新导入你转储的数据。这将消除表空间损坏的任何可能性。