3

私は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。それらはおそらく問題です。

これらのゴーストキーを削除するにはどうすればよいですか?データベースを再作成してデータだけをコピーすることもできますが、それは非常に大きいので、可能であれば、そうはしません。

情報が必要な場合はお知らせください。

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 に答える