MySQL-сделать пару значений уникальными

У меня есть таблица с двумя значениями int, которые являются идентификаторами. Сами по себе эти идентификаторы могут отображаться в таблице любое количество раз, но вместе они должны появляться только один раз.

есть ли способ сделать пару значений уникальными и все же позволить отдельным значениям отображаться несколько раз?

в качестве продолжения, если это возможно, можно ли использовать пару значений в качестве ключа? В настоящее время у меня есть 3-й столбец для уникального значения автоматического приращения для моего ключ.

3 ответов


это называется составной ключ.

если вы хотите изменить свой фактический ПК на составной, используйте

Alter table <your table> drop PRIMARY KEY;
Alter table <your table> drop COLUMN <your autoincremented column>;

Alter table <your table> add [constraint <constraint name>] PRIMARY KEY (<col1>, <col2>);

вы также можете просто добавить уникальное ограничение (ваш ПК будет таким же и уникальными парами... должны быть уникальными).

alter table <your table> add [constraint <constraint name>] unique index(<col1>, <col2>);

Personnally, я бы рекомендовал второе решение (простое ограничение PK + unique), но это просто личная точка зрения. Вы можете google для аргументов " ЗА " и "против" о составных ключах.

в часть между [] необязательны.

редактировать

если вы хотите сделать это в инструкции create table

для составного ПК

CREATE TABLE Test(
       id1 int NOT NULL, 
       id2 int NOT NULL,
       id3 int NOT NULL,
       PRIMARY KEY (id1, id2)
    );

для уникального индекса

CREATE TABLE Test1(
       id1 int NOT NULL  AUTO_INCREMENT, 
       id2 int NOT NULL,
       id3 int NOT NULL,
       PRIMARY KEY (id1),
       UNIQUE KEY (id2, id3)
    );

попробуйте это: ALTER TABLE table_name ADD CONSTRAINT uc_name UNIQUE (col1,col2)


добавить primary key (col1, col2) для создания определения таблицы