我正在尝试同时创建一个带有索引的外键,并明确指定它们的名称。
[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;
我错过了什么吗?
答案 0 :(得分:3)
我从未使用过这种语法。我总是与外键分开创建索引以控制名称。
这应该适合你:
ALTER TABLE MyTable
ADD KEY IDX_MyTable_Zone (zoneId),
ADD CONSTRAINT FK_MyTable_Zone FOREIGN KEY (zoneId) REFERENCES Zone (id);