Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

Он называется составным ключом.

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

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>);

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

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

ИЗМЕНИТЬ

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

Для композита pk

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)
    );

Ответ 2

Попробуйте следующее: ALTER TABLE table_name ADD CONSTRAINT uc_name UNIQUE (col1,col2)

Ответ 3

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