多対多のリンクテーブルがあり、その上に2つの外部キーを設定しようとしています。私はこれらの2つのステートメントを実行します:
ALTER TABLE address_list_memberships
ADD CONSTRAINT fk_address_list_memberships_address_id
FOREIGN KEY index_address_id (address_id)
REFERENCES addresses (id);
ALTER TABLE address_list_memberships
ADD CONSTRAINT fk_address_list_memberships_list_id
FOREIGN KEY index_list_id (list_id)
REFERENCES lists (id);
実行すると、次のように表示されるSHOW CREATE TABLE address_list_memberships
と思います。
[...]
KEY `index_address_id` (`address_id`),
KEY `index_list_id` (`list_id`),
CONSTRAINT `fk_address_list_memberships_list_id` FOREIGN KEY (`list_id`)
REFERENCES `lists` (`id`),
CONSTRAINT `fk_address_list_memberships_address_id` FOREIGN KEY (`address_id`)
REFERENCES `addresses` (`id`)
しかし、代わりに私はこれを取得します:
[...]
KEY `index_list_id` (`list_id`),
CONSTRAINT `fk_address_list_memberships_list_id` FOREIGN KEY (`list_id`)
REFERENCES `lists` (`id`),
CONSTRAINT `fk_address_list_memberships_address_id` FOREIGN KEY (`address_id`)
REFERENCES `addresses` (`id`)
インデックスが1つしかないように見えます。外部キーを作成するたびにMySQLが参照列にインデックスを自動的に作成するというMySQLのドキュメントと矛盾しているようです。
CocoaMySQLやSQLyogなどのGUIツールを使用するか、コマンドラインで実行するかにかかわらず、テーブルに2つのFKを作成するたびに、この1つのインデックスのみに気づきました。
この謎の照明は非常にありがたいです。