2

我正在尝试同时创建一个带有索引的外键,并明确指定它们的名称。

手册说:

[CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

index_name 表示外键 ID。如果给定,如果明确定义了外键的索引,则忽略它。否则,如果 InnoDB 为外键创建索引,它使用 index_name 作为索引名称。

所以我尝试了以下方法:

ALTER TABLE MyTable
ADD CONSTRAINT FK_MyTable_Zone FOREIGN KEY
IDX_MyTable_Zone (zoneId)
REFERENCES Zone (id);

但是SHOW CREATE TABLE说明IDX_MyTable_Zone没有考虑索引名,索引名也使用了外键名:

CREATE TABLE `MyTable` (
  `zoneId` int(10) unsigned NOT NULL,
  KEY `FK_MyTable_Zone` (`zoneId`),
  CONSTRAINT `FK_MyTable_Zone` FOREIGN KEY (`zoneId`) REFERENCES `Zone` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我错过了什么?

4

1 回答 1

3

我从来没有使用过这种语法。为了控制名称,我总是与外键分开创建索引。

这应该适合你:

ALTER TABLE MyTable
ADD KEY IDX_MyTable_Zone (zoneId),
ADD CONSTRAINT FK_MyTable_Zone FOREIGN KEY (zoneId) REFERENCES Zone (id);
于 2013-01-18T14:51:33.823 回答