インデックスを使用して外部キーを同時に作成し、両方の名前を明示的に指定しようとしています。
マニュアルには次のように書かれています。
[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;
私は何か見落としてますか?