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 に答える