2009-05-08 9 views
128

主キーがいくつかの他のテーブルで使用され、他のテーブルにいくつかの外部キーがあるテーブルがあります。MySQLいくつかの外部キーの削除

CREATE TABLE location (
    locationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
    ... 
) ENGINE = InnoDB; 

CREATE TABLE assignment (
    assignmentID INT NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    locationID INT NOT NULL, 
    FOREIGN KEY locationIDX (locationID) REFERENCES location (locationID) 
    ... 
) ENGINE = InnoDB; 

CREATE TABLE assignmentStuff (
    ... 
    assignmentID INT NOT NULL, 
    FOREIGN KEY assignmentIDX (assignmentID) REFERENCES assignment (assignmentID) 
) ENGINE = InnoDB; 

問題は、外部キー列(つまり、locationIDX)の1つを削除しようとすると、エラーが発生することです。

"ERROR 1025(HY000):名前変更のエラー"

どのように私はこのエラーを取得することなく、上記の割り当てテーブルに列をドロップすることができますか?

答えて

332

としてはhereを説明し、外部キー制約が制約名ではなく、インデックス名でドロップする必要があるようです。構文は次のとおりです。

+25

これは私の問題でした。私は今、親切な気分になります。他の誰かがこの問題を抱えている場合は、SHOW CREATE TABLE関数を使用して外部キー制約名を見つけることができます。 – Drew

+0

それは私のために働いた – bynu022

+5

ヒント: 'SHOW CREATE TABLE footable;'を使用して、制約の名前を確認します。それは列ごとの名前ではありません。答えをありがとう! –

0

外部キー列がテーブルassignmentStuffから参照されているため、外部キー列を削除できません。したがって、まず外部キー制約assignmentStuff.assignmentIDXを削除する必要があります。

すでに同様の質問がありますhere。詳細については、hereもご確認ください。

+1

ので、assignmentStuffは割り当ての主キーを参照するため、私は割り当てのlocationIDの列を削除することはできませんか? これは直感的なカウンターのようです。 – Drew

+0

私は答えが本当に意味をなさないので、私はいくつかの列名を切り替えたようだ。申し訳ありません... –

+0

心配しないで、仲間 – Drew

20

外部キーはデータの整合性を保証するために存在するため、外部キーの一部である限り、列を削除することはできません。最初にキーを削除する必要があります。

私は、次のクエリは、それを行うと思うだろう:

ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX; 
3

ここでは、外部キー制約を削除する方法があります。 変更テーブルlocationlocation_id DROP FOREIGN KEY location_ibfk_1;誰もが上記の言ったように、あなたは簡単にFKを削除することができ

alter table Documents drop 
    FK__Documents__Custo__2A4B4B5E 
0

はこれを試してみてください。しかし、ある時点でKEY自体を削除する必要があることに気がつきました。最後のような別のインデックスを作成するというエラーメッセージが表示された場合は、同じ名前であれば、そのインデックスに関連するすべてのものを削除すると便利です。

ALTER TABLE table_name 
    DROP FOREIGN KEY the_name_after_CONSTRAINT, 
    DROP KEY the_name_after_FOREIGN_KEY; 

・ホープ、このことができます:

SHOW CREATE TABLE table_name; 

CONSTRAINT名とFOREIGN KEY名の両方を削除します。CONSTRAINT名とFOREIGN KEYの名前は何

ALTER TABLE your_table_with_fk 
    drop FOREIGN KEY name_of_your_fk_from_show_create_table_command_result, 
    drop KEY the_same_name_as_above 
8

1

テーブルがInnoDBエンジンを使用している場合は、通常このエラーが発生します。その場合は、外部キーを削除してから、alter tableを実行して列を削除する必要があります。

しかし、トリッキーな部分は、列名を使用して外部キーを削除することはできませんが、代わりにインデックスに使用する名前を見つける必要があるということです。これを見つけるには、次の項目を選択してください。

SHOW CREATE TABLE region; これはあなたに行を表示する必要があります左上隅に+オプションをクリックし、全文のraioボタンをクリックしてgoをクリックしてください:

CONSTRAINT region_ibfk_1 FOREIGN KEY(country_id)参照国(ID)NO UPDATE NO NOTIONにアクションを削除しないでください 今すぐ単に発行してください:

alter table regionドロップ外部キーregion_ibfk_1;

または

もっと単純に入力します。 - ALTER TABLEテーブル名は、外部キーTableName_ibfk_1をドロップ。

唯一のことは、このようにするために、あなたのテーブル名の後に_ibfk_1を追加することであることを覚えている: - テーブル名_ibfk_1

関連する問題