217

主キーが他のいくつかのテーブルで使用され、他のテーブルへのいくつかの外部キーを持つテーブルがあります。

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 つを削除しようとすると、エラーが発生することです。

「エラー 1025 (HY000): 名前変更エラー」

このエラーを発生させずに上記の割り当てテーブルの列を削除するにはどうすればよいですか?

4

11 に答える 11

506

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

構文は次のとおりです。

ALTER TABLE footable DROP FOREIGN KEY fooconstraint;
于 2009-05-08T05:54:54.117 に答える
21

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

次のクエリがそれを行うと思います:

ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;
于 2009-05-08T05:50:20.727 に答える
17

上で誰もが言ったように、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
于 2016-01-03T08:42:31.117 に答える
0

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

同様の質問がすでにここで尋ねられています。詳しくはこちらもご確認ください。

于 2009-05-08T05:49:49.090 に答える