index - unique field mysql
MySQL-Haz un par de valores únicos (3)
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.
¿Hay alguna forma de hacer que un par de valores sea único y aún así permitir que los valores individuales aparezcan varias veces?
Como seguimiento, si esto es posible, ¿se puede usar el par de valores como una clave? Actualmente tengo una tercera columna para un valor único de incremento automático para mi clave.
Pruebe esto: ALTER TABLE table_name ADD CONSTRAINT uc_name UNIQUE (col1,col2)
Se llama clave compuesta.
Si desea cambiar su PK real a una compuesta, use
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 puede agregar una restricción única (su PK será la misma, y los pares únicos ... tendrán que ser únicos).
alter table <your table> add [constraint <constraint name>] unique index(<col1>, <col2>);
Personalmente, recomendaría la segunda solución (restricción PK simple + única), pero eso es solo un punto de vista personal. Puede buscar argumentos de pros y contras sobre claves compuestas en google.
La parte entre []
es opcional.
EDITAR
Si quieres hacer esto en la declaración create table
Para un compuesto pk
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)
);
agregar primary key (col1, col2)
a su definición de tabla de creación