2012-10-01 44 views
1

我有一個名爲Things的InnoDB表。該表對Field1,Field2和MoarFields有外鍵約束。如何修復MySQL ghost外鍵約束?

我改名此表things,並改名爲字段field1field2,並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。這可能是問題所在。

如何刪除這些幽靈的鑰匙?我可以重新創建數據庫並複製數據,但數據量很大,所以如果可能的話,我寧願不這樣做。

請讓我知道如果你想/需要的任何信息。

+0

可以顯示您試圖在新字段上創建外鍵的語句嗎? – raina77ow

+0

對不起,我說這個問題部分不正確。我確實添加了我嘗試去做的結果。我希望它有幫助。 – Aeolun

回答

0

遲到的答案,但試試這個找到約束

使用INFORMATION_SCHEMA; 選擇TABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME, REFERENCED_TABLE_NAME,從KEY_COLUMN_USAGE REFERENCED_COLUMN_NAME;

0

你可以用下面的命令來擺脫它。

drop index FK_MemberRole_Member; 
Drop constraint FK_MemberRole_Member; 
+0

不幸的是,我現在不再真正地在測試這個解決方案是否有效,但希望它能幫助其他人!如果有人評論說它工作正常,我會將其標記爲已接受的答案:) – Aeolun