2012-10-06 14 views
33

Tengo una tabla con dos valores int que son ID. Por sí mismos, estos ID pueden aparecer varias veces en la tabla, pero juntos solo deberían aparecer una vez.MySQL - Haga un par de valores únicos

¿Hay alguna manera de hacer que un par de valores sea único y aún permitir que los valores individuales aparezcan varias veces?

Como seguimiento, si esto es posible, ¿se pueden usar los pares de valores como una clave? Actualmente tengo una tercera columna para un valor único de incremento automático para mi clave.

+0

¿Cuál es su intención ¿aquí? ¿Para mantener las combinaciones únicas, o para necesitar usar ambas para identificar la fila? –

Respuesta

50

Se llama una clave compuesta.

Si usted quiere cambiar su PK real a uno compuesto, utilice

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

También se puede simplemente añadir una restricción única (el PK será el mismo, y los pares únicos ... tendrá que ser único).

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

Personalmente, recomendaría la segunda solución (PK sencilla + restricción única), pero eso es sólo un punto de vista personal. Puede buscar argumentos de pros y contras sobre claves compuestas en google.

La parte entre [] es opcional.

EDITAR

Si lo que quieres hacer esto en la instrucción create table

Para un pk compuesta

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

Para un índice único

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 para especificar el término clave compuesta, que ayuda a las personas como yo a aprender sobre esta nueva función –

+0

Podría también agregas un ejemplo de cómo se hace esto en la declaración 'CREATE TABLE' –

+0

@ TomášZato ver Editar. –

0

añadir primary key (col1, col2) a su definición de la tabla crear

7

Prueba esto: ALTER TABLE table_name ADD CONSTRAINT uc_name UNIQUE (col1,col2)

+0

Estaba pensando que es una '* mejor manera *'; mysql al menos frustra la intención y la transforma en una 'CLAVE ÚNICA' ... Mismo resultado que: 'ALTER TABLE panel ADD UNIQUE KEY name_label_UNIQUE (name, label); '. Además, encontré que necesita 'DROP KEY' cuando agrega:' CONSTRAINT ... UNIQUE' * ho hum * – will

Cuestiones relacionadas