¿Cómo especifico una restricción única para varias columnas en MySQL?
Tengo una mesa:
table votes (
id,
user,
email,
address,
primary key(id),
);
¿Cómo puedo hacer que las columnas usuario, correo electrónico y dirección sean únicas, es decir, asegurarme de que no haya ningún par de filas que tenga valores idénticos para las tres columnas?
Para agregar una restricción única, necesita usar dos componentes:
ALTER TABLE
- cambiar el esquema de la tabla y,
ADD UNIQUE
- para agregar la restricción única.
Luego puede definir su nueva clave única con el formato'name'('column1', 'column2'...)
Entonces, para tu problema particular, puedes usar este comando:
ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);
Tengo una tabla MySQL:
CREATE TABLE `content_html` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_box_elements` int(11) DEFAULT NULL,
`id_router` int(11) DEFAULT NULL,
`content` mediumtext COLLATE utf8_czech_ci NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `my_uniq_id` (`id_box_elements`,`id_router`)
);
y la CLAVE ÚNICA funciona como se esperaba, permite múltiples filas NULL de id_box_elements e id_router.
Estoy ejecutando MySQL 5.1.42, por lo que probablemente hubo alguna actualización sobre el tema discutido anteriormente. Afortunadamente funciona y ojalá siga así.
Los índices únicos de varias columnas no funcionan en MySQL si tiene un valor NULL en la fila, ya que MySQL trata a NULL como un valor único y al menos actualmente no tiene lógica para solucionarlo en índices de varias columnas. Sí, el comportamiento es una locura, porque limita muchas aplicaciones legítimas de índices de múltiples columnas, pero es lo que es... Hasta el momento, es un error que ha sido marcado con "no se solucionará" en MySQL. seguimiento de errores...