2012-08-12 21 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命令,因为您希望该列是唯一的 - 而不是外键本身。