3

我有一个名为 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. 这些可能是问题所在。

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

如果您想要/需要任何信息,请告诉我。

4

2 回答 2

0

迟到的答案,但尝试这个来找到限制

使用 INFORMATION_SCHEMA;从 KEY_COLUMN_USAGE 中选择 TABLE_NAME、COLUMN_NAME、CONSTRAINT_NAME、REFERENCED_TABLE_NAME、REFERENCED_COLUMN_NAME;

于 2013-06-11T09:37:16.190 回答
0

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

drop index FK_MemberRole_Member;
Drop constraint FK_MemberRole_Member;
于 2016-10-06T22:41:42.267 回答