私は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
。それらはおそらく問題です。
これらのゴーストキーを削除するにはどうすればよいですか?データベースを再作成してデータだけをコピーすることもできますが、それは非常に大きいので、可能であれば、そうはしません。
情報が必要な場合はお知らせください。