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