Sí, MySQL proporciona la capacidad de hacer esto.
ALTER TABLE MyTable
ADD UNIQUE KEY `my_unique_key` (`group_id`, `user_id`)
No sé lo que estás utilizando esta tabla para obtener, pero suena como esta clave única puede ser un fuerte candidato para la clave primaria de la tabla. Una clave principal también es automáticamente una clave única. Si decide que sea la clave principal, a continuación, hacer lo siguiente en su lugar:
ALTER TABLE MyTable
ADD PRIMARY KEY (`group_id`, `user_id`)
(. Si recibe un mensaje de error que ya hay una clave principal, a continuación, emitir ALTER TABLE MyTable DROP PRIMARY KEY
y luego repetir el comando anterior)
Editar : En respuesta a los comentarios del usuario
no se puede tener múltiples filas con idénticos valores no NULL
para las columnas cubiertas por la clave única. Por lo tanto, no puede tener dos filas donde group_id = 0 AND user_id = 5
, por ejemplo. 0 es un valor. Pero si haces una o ambas de las columnas anulables, que puede tienen varias filas que son idénticos hasta el posicionamiento de NULL
s. Por lo que podría tener dos (o más) filas donde group_id IS NULL AND user_id = 1234
.
Proviso: Lo anterior es cierto tanto para los motores de almacenamiento de MySQL comúnmente utilizadas (MyISAM y InnoDB). MySQL tiene motores de almacenamiento en los que NULL
se considera un valor único, pero es probable que no los esté usando.
Si hace que una o ambas columnas sean nulables, su clave única no puede ser la clave principal; la clave principal debe estar en las columnas que son NOT NULL
.
Supongamos que ha convertido esta clave en su clave principal y ahora desea permitir NULL
en la columna group_id
. No sé qué tipo de datos es group_id
en este momento; Asumiré que actualmente es INT UNSIGNED NOT NULL
, pero tendrá que modificar el siguiente si no es esto. Ya no podrá usar esta clave como su clave principal. Aquí hay un comando que podría ejecutar para realizar los cambios deseados:
ALTER TABLE MyTable
DROP PRIMARY KEY,
MODIFY group_id INT UNSIGNED,
ADD UNIQUE KEY `my_unique_key_with_nulls` (`group_id`, `user`)
¿Hay algún motivo por el que group_id y user_id no sean las claves principales de esta tabla? – Gus
Se establecen como índices, pero ¿establecerse en primario hace la diferencia para tratar de lograr la tarea? Si es así, puedo hacerlos primarios. – user396404