我收到了一个奇怪的错误。我有一张桌子animals
,我试图放弃。由于外键约束失败,我无法删除表。我知道在放下桌子之前我必须丢弃外键。问题是这个表没有外键。我已经放弃了它们。 SQLyog反映他们已被删除。但我仍然可以在info架构中找到它们。好像我把钥匙掉了一半或者别的东西。
如何在不删除数据库的情况下删除此表?我需要重新调整此表,我只想删除它并重新创建它。
编辑: 以下是来自SQL的错误消息:
Cannot delete or update a parent row: a foreign key constraint fails
答案 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表空间文件,然后重启并重新导入你转储的数据。这将消除表空间损坏的任何可能性。