mysql - 无法删除 mysql 表

标签 mysql sql sqlyog drop-table

我遇到了一个奇怪的错误。我有一个表 animals,我正试图删除它。由于外键约束失败,我无法删除该表。我知道在删除表之前我必须删除外键。问题是这张表没有外键。我已经放弃了。 SQLyog 反射(reflect)它们已被删除。但我仍然可以在信息架构中找到它们。就好像我把 key 掉到一半什么的。

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

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

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

最佳答案

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

重要的是,有其他表的外键引用animals

检查方法如下:

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

回复你的评论:

我从来没有听说过外键不可见但仍然阻止表被删除的情况。但我认为这是可能的。

如果你这样做,你可以放下你的 table :

mysql> SET FOREIGN_KEY_CHECKS=0;
mysql> DROP TABLE animals;
mysql> SET FOREIGN_KEY_CHECKS=1;

但是,如果 InnoDB 表空间已经处于一种奇怪的状态,我无法预测会出现什么问题。

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

关于mysql - 无法删除 mysql 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21536329/

相关文章:

MySQL LOAD DATA LOCAL INFILE 客户端中的差异

php - 在文本中保存光标高亮位置

mysql - 起诉 Laravel 查询生成器时,每月计算客户数量不起作用

android - 从 JSONArray 到 SqLite 插入/更新 +10000 行时如何防止应用程序崩溃

sql - 执行Spark Job时GettingTask不可序列化异常

mysql - 仅 1 列上的 SQL 条件

php - laravel 4 eloquent 中的生命周期回调

c++ - QSqlquery prepare() 和 bindvalue() 不工作?

mysql - 从 SQL Yog 连接到 MYSQL 服务器

mysql - UNION 语句不起作用,被迫使用 JOIN(性能主导?)