InnoDB:使用显式索引名创建外键

时间:2013-01-18 14:45:39

标签: mysql innodb

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

The manual说:

[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;

我错过了什么吗?

1 个答案:

答案 0 :(得分:3)

我从未使用过这种语法。我总是与外键分开创建索引以控制名称。

这应该适合你:

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