8

MySQLを使用して「不正なインデックス名'f7'」というエラーが発生し続け、次のように絞り込みました。

まず、テーブルを作成します。

CREATE TABLE testTable (
    id INTEGER PRIMARY KEY AUTO_INCREMENT,
    f7 INTEGER NOT NULL,
    FOREIGN KEY (f7) REFERENCES testTable2 (id) ON DELETE CASCADE ON UPDATE CASCADE,
) ENGINE=InnoDB;

そして他の場所では、

ALTER TABLE testTable ADD UNIQUE f7;

これは、これが重複したインデックス(?)に関係していると私に信じさせました。私はそれを修正する方法を理解することができません。どうもありがとう。

4

2 に答える 2

11

外部キーインデックスと競合しないように名前を付けます

ALTER TABLE `testtable`  ADD UNIQUE INDEX `foo` (`f7`);
于 2012-08-14T18:30:34.257 に答える
6

既存のincorrect index nameインデックスと同じ名前で新しいインデックスを作成しようとすると、エラーが発生します。

MySQLでは、外部キーを作成すると、で行っているようFOREIGN KEY (f7) REFERENCES testTable2 (id) ON DELETE CASCADE ON UPDATE CASCADEに、インデックスも自動作成されます。この場合、名前はデフォルトで。になりf7ます。

外部キーは、一意でないインデックスとして作成されます。2番目のコマンド:ALTER TABLE testTable ADD UNIQUE (f7);このインデックスを一意にします-2番目のインデックスを追加しません。

テーブルにすでに存在するインデックスを確認するには、次を使用できます。

SHOW INDEXES FROM testTable;

このエラーが発生した場合は、という名前のインデックスを作成しようとしている追加のコードが他の場所にある可能性がありますf7。それを見つけようとするか、CREATE TABLE構文を変更して、競合が発生しないようにキーに別の名前を付けることができます。

FOREIGN KEY fk_testTable_f7 (f7) REFERENCES testTable2 (id) ON DELETE CASCADE ON UPDATE CASCADE

この例では、を使用fk_testTable_f7しました。これで、という名前のテーブルに一意でないインデックスが作成されますfk_testTable_f7ALTER一意にするために、外部キー自体ではなく、列を一意にするために既存のコマンドを使用できます。

于 2012-08-14T18:33:22.163 に答える