web-dev-qa-db-ja.com

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;

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

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

このエラーが発生せずに上記の割り当てテーブルの列を削除する方法を教えてください。

169
Drew

ここ で説明したように、外部キー制約はインデックス名ではなく制約名で削除する必要があるようです。構文は次のとおりです。

alter table footable drop foreign key fooconstraint
408
pugmarx

外部キーはデータの完全性を保証するためにあります。したがって、外部キーの一部である限り、列を削除することはできません。最初にキーを落とす必要があります。

私は次のような問い合わせでそれができると思います。

ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;
21
zombat

誰もが上で言ったように、あなたは簡単にFKを削除することができます。しかし、ある時点で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

CONSTRAINT名とFOREIGN KEY名が何であるかを確認してください。

SHOW CREATE TABLE table_name;

CONSTRAINT名とFOREIGN KEY名の両方を削除してください。

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

お役に立てれば!

8
norodin

これは外部キー制約を削除する方法です、それはうまくいきます。 ALTER TABLE location.location_id DROP FOREIGN KEY location_ibfk_1;

3

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

しかし注意が必要なのは、列名を使用して外部キーを削除することはできないということですが、その代わりに、インデックスに使用されている名前を見つける必要があります。それを見つけるには、次のselectを発行します。

SHOW CREATE TABLEリージョン。これで行が表示されます。左上隅にある[+]オプションをクリックし、[フルテキスト]のraioボタンをクリックしてから[go]をクリックします。インデックスの名前が表示されます。

CONSTRAINT region_ibfk_1外部キー(country_id)参照country(id)でNO NO ACTIONまたはNO UPDATE NO ACTION今度は単に以下を発行します。

表領域ドロップ外部キーregion_ibfk_1を変更します。

または

もっと単純にタイプするだけです: - テーブルTableNameを削除する外部キーを変更する TableName_ibfk_1;

唯一のことは覚えておくことです _ibfk_1 このようにするためにあなたのテーブル名の後に: - TableName_ibfk_1

1
Abinash Hota

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

同様の質問がすでにあります ここ 。詳細は こちら もチェックしてください。

0

step1:show create table vendor_locations;

step2:ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;

それは私のために働きました。

0
Jyothi M

これを試して:

alter table Documents drop
  FK__Documents__Custo__2A4B4B5E
0