MySQL“错误的索引名称...”错误(唯一外键)

时间:2012-08-12 00:28:09

标签: mysql

我一直在使用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;

This让我相信这与重复索引有关(?)我无法弄清楚如何修复它。非常感谢。

2 个答案:

答案 0 :(得分:9)

为其命名,因此它不会与外键索引

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

答案 1 :(得分:5)

当您尝试创建与现有索引同名的新索引时,会出现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命令,因为您希望列是唯一的 - 而不是外键本身。