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

外键创建为非唯一索引;您的第二个命令: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命令,因为您希望列是唯一的 - 而不是外键本身。

于 2012-08-14T18:33:22.163 回答