我一直在使用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让我相信这与重复索引有关(?)我无法弄清楚如何修复它。非常感谢。
答案 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
命令,因为您希望列是唯一的 - 而不是外键本身。