如何修复MySQL ghost外键约束?

时间:2012-10-01 09:48:58

标签: mysql foreign-keys foreign-key-relationship

我有一个名为Things的InnoDB表。该表对Field1,Field2和MoarFields有外键约束。

我将此表重命名为things,并将字段重命名为field1field2moar_fields(均为小写)。

此时,新命名的表things的所有外键都突然消失了。这很好,我不想要它们,但我实际上并没有删除它们。

然后我尝试修改另一个表中的字段名称,该表也需要小写,但它会抱怨外键约束阻止了这一点。

ALTER TABLE `member` CHANGE COLUMN `MemberID` `member_id` INT(11) NOT NULL AUTO_INCREMENT FIRST;
/* SQL Error (1025): Error on rename of './database/#sql-411_3e7' to './database/member' (errno: 150) Foreign key constraint is incorrectly formed */

SHOW ENGINE INNODB STATUS告诉我问题是:

121001 12:02:12 Error in foreign key constraint of table database/Things:
there is no index in referenced table which would contain
the columns as the first columns, or the data types in the
referenced table do not match the ones in table. Constraint:
,
  CONSTRAINT "FK_MemberRole_Member" FOREIGN KEY ("MemberID") REFERENCES "member" ("MemberID") ON DELETE CASCADE
InnoDB: Renaming table `database`.`#sql-411_3e7` to `database`.`member` failed!

如果我show create table things,我看不到任何外键。虽然我确实看到了4个带有我的外键名称的普通键。

但是,如果我查看schema_information数据库,我可以看到InnoDB存储了4个密钥,用于不再存在的表,即Things。那些可能就是问题所在。

如何删除这些鬼键?我可以重新创建数据库并仅复制数据,但它非常大,所以如果可能的话,我宁愿不这样做。

如果您需要/需要任何信息,请与我们联系。

2 个答案:

答案 0 :(得分:0)

迟到的答案,但试着找到约束

使用INFORMATION_SCHEMA; 选择TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, 来自KEY_COLUMN_USAGE的REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME;

答案 1 :(得分:0)

您可以使用以下命令来摆脱它。

drop index FK_MemberRole_Member;
Drop constraint FK_MemberRole_Member;