2012-08-12 20 views
4

我不斷收到錯誤「不正確的索引名‘F7’」使用MySQL,我已經把範圍縮小到以下幾點:MySQL的「不正確的索引名稱...」的錯誤(獨特的外鍵)

首先我創建表,

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; 

This使我相信,這與重複指數(?)我只是無法弄清楚如何解決辦它。非常感謝。

+0

當您收到此錯誤時,您正在做什麼? – Kermit 2012-08-14 18:15:00

回答

8

給它一個名稱,所以它不與外鍵索引

ALTER TABLE `testtable` ADD UNIQUE INDEX `foo` (`f7`); 
4

當你試圖創建具有相同名稱的新指標作爲現有的索引被賦予一個incorrect index name錯誤發生衝突。

在MySQL中,當你創建一個外鍵,就像你在做FOREIGN KEY (f7) REFERENCES testTable2 (id) ON DELETE CASCADE ON UPDATE CASCADE一樣,索引也是自動創建的。在這種情況下,名稱默認爲f7

外鍵被創建爲非唯一索引;你的第二個命令:ALTER TABLE testTable ADD UNIQUE (f7);將使這個索引獨一無二 - 不會添加第二個。

爲了驗證什麼桌子上已經存在索引,可以使用以下命令:

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_f7。要使其唯一,您可以使用現有的ALTER命令,因爲您希望該列是唯一的 - 而不是外鍵本身。