【发布时间】:2012-10-01 09:48:58
【问题描述】:
我有一个名为 Things 的 InnoDB 表。该表在 Field1、Field2 和 MoarFields 上有外键约束。
我将此表重命名为 things,并将字段重命名为 field1、field2 和 moar_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。这些可能就是问题所在。
如何删除那些幽灵钥匙?我可以重新创建数据库并只复制数据,但它非常大,所以如果可能的话,我宁愿不这样做。
如果您想要/需要任何信息,请告诉我。
【问题讨论】:
-
您能否展示您尝试在新字段上创建外键的语句?
-
对不起,我说的问题部分不正确。我确实添加了我尝试做的结果。我希望它有所帮助。
标签: mysql foreign-keys foreign-key-relationship