MySQL - уникальный внешний ключ - PullRequest
6 голосов
/ 15 марта 2011

Я должен сделать один из внешних ключей уникальным.Проблема в том, что я получаю следующее сообщение от phpMyAdmin:

The following indexes appear to be equal and one of them should be removed: consignmentnumber_id_UNIQUE, fk_consignments_consignmentnumbers2

Так что мой вопрос таков: меня беспокоить?Действительно ли важно не иметь таких индексов?

Ответы [ 4 ]

14 голосов
/ 15 марта 2011

Каждый столбец с ключом (первичным, внешним) нуждается в индексе. То же самое с колонкой, являющейся уникальной. Вы, вероятно, создали два индекса (один при создании FK и один при ограничении на уникальность). Если это так, просто отбросьте один из этих индексов.

БД поддерживает два эквивалентных индекса.

7 голосов
/ 17 декабря 2013
mysql > create unique index index_bar_id on foos(bar_id);
mysql > alter table foos add constraint index_bar_id foreign key (bar_id) references bars (id);

Подробнее на http://sixarm.com/about/mysql-create-indexes-foreign-keys-constraints.html

2 голосов
/ 08 марта 2017

В будущем, если вы хотите сделать свой внешний ключ уникальным, вы можете просто изменить столбец внешнего ключа следующим образом:

ALTER TABLE your_table
MODIFY COLUMN your_fk_column [INT, VARCHAR etc.][NOT NULL] UNIQUE;
1 голос
/ 19 февраля 2016

Точно так же, как вы знаете, кажется, что вы также можете иметь уникальные внешние ключи:

CREATE TABLE user(
uid INT NOT NULL AUTO_INCREMENT,
username VARCHAR(16) NOT NULL UNIQUE,
email_id INT NOT NULL UNIQUE,
FOREIGN KEY (email_id) REFERENCES email(uid)
    ON DELETE CASCADE
    ON UPDATE CASCADE,

PRIMARY KEY (uid));
...