2012-10-06 15 views
33

Mam tabelę z dwiema wartościami int, które są identyfikatorami. Same te identyfikatory mogą pojawiać się dowolną liczbę razy w tabeli, ale razem powinny pojawiać się tylko raz.MySQL - Utwórz unikalną parę wartości

Czy istnieje sposób na uniknięcie pary wartości i nadal pozwalają na wielokrotne pokazywanie poszczególnych wartości?

W dalszej kolejności, jeśli jest to możliwe, można użyć pary wartości jako klucza? Obecnie mam 3 kolumnę dla unikalnej wartości auto increment dla mojego klucza.

+0

Jaka jest Twoja intencja tutaj? Aby zachować kombinacje unikatowe lub trzeba użyć obu do zidentyfikowania wiersza? –

Odpowiedz

50

To się nazywa klucz kompozyt.

Jeśli chcesz zmienić swój rzeczywisty PK do jednego złożonego, należy

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

Można też po prostu dodać unique (Twój PK będą takie same, a unikalne pary będą musiały ... być wyjątkowym).

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

Personnally, polecam to drugie rozwiązanie (prosty PK + UNIQUE), ale to tylko osobisty punkt widzenia. Możesz google argumentować o argumentach za i przeciw kluczom złożonym.

Część między [] jest opcjonalna.

EDIT

Jeśli chcesz to zrobić w rachunku tworzenia tabeli

Dla złożonego pk

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

na niepowtarzalny indeks

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

+1 do określenia terminu klucz złożony, Który pomaga ludziom takim jak ja, aby dowiedzieć się o tej nowej funkcji –

+0

Może dodajesz również przykład, jak to robi się w instrukcji 'CREATE TABLE'? –

+0

@ TomášZato patrz Edytuj. –

0

dodać primary key (col1, col2) do stworzenia definicji tabeli

7

Spróbuj tego: ALTER TABLE table_name ADD CONSTRAINT uc_name UNIQUE (col1,col2)

+0

Myślałem, że to "* lepszy sposób *"; mysql co najmniej rezygnuje z zamiaru i przekształca go w 'UNIQUE KEY' ... Ten sam wynik co:' ALTER TABLE panel DODAJ UNIKALNY KEY name_label_UNIQUE (name, label); '. Zauważyłem również, że musisz "KOPIĆ KROK", gdy dodasz: 'CONSTRAINT ... UNIQUE' * ho hum * – will