Pregunta ¿Cómo especifico una restricción única para múltiples columnas en MySQL?


Tengo una mesa:

table votes (
    id,
    user,
    email,
    address,
    primary key(id),
);

Ahora quiero hacer las columnas usuario, correo electrónico, dirección único (juntos).

¿Cómo hago esto en MySql?

  • Por supuesto, el ejemplo es solo ... un ejemplo. Entonces, por favor, no te preocupes por la semántica.

727
2018-03-11 19:12


origen


Respuestas:


ALTER TABLE `votes` ADD UNIQUE `unique_index`(`user`, `email`, `address`);

1209
2018-03-11 19:14



Tengo una tabla de 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 `id_box_elements` (`id_box_elements`,`id_router`)
);

y la ÚNICA CLAVE funciona tal como se esperaba, permite múltiples filas NULL de id_box_elements e id_router.

Estoy ejecutando MySQL 5.1.42, así que probablemente hubo alguna actualización sobre el tema discutido anteriormente. Afortunadamente funciona y espero que así sea.


186
2017-08-09 14:56



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 insano, porque limita muchas aplicaciones legítimas de índices de varias columnas, pero es lo que es ... Hasta el momento, es un error que ha sido marcado con "no se corregirá" en MySQL bug-track ...


42
2018-05-07 21:21



¿Has probado esto?

UNIQUE KEY `thekey` (`user`,`email`,`address`)

21
2018-03-11 19:14



Esto funciona para mysql versión 5.5.32

ALTER TABLE  `tablename` ADD UNIQUE (`column1` ,`column2`);

11
2018-01-02 19:00



Puede agregar índices únicos de múltiples columnas a través de phpMyAdmin. (Probé en la versión 4.0.4)

Navega hacia el estructura página para su tabla objetivo Agregue un índice único a una de las columnas. Ampliar la Índices enumere en la parte inferior de la página de estructura para ver el índice único que acaba de agregar. Haga clic en el ícono editar, y en el siguiente diálogo puede agregar columnas adicionales a ese índice único.


6
2018-03-20 00:40



MySql 5 o superior se comporta así (acabo de probar):

  • puede definir restricciones únicas que implican columnas que aceptan nulos. Supongamos que define una restricción única (A, B) donde A no es nulable pero B es
  • al evaluar tal restricción puede tener (A, nulo) tantas veces como desee (¡el mismo valor de A!)
  • solo puedes tener un par (A, no nulo B)

Ejemplo: PRODUCT_NAME, PRODUCT_VERSION 'vidrio', nulo 'vidrio', nulo 'vino', 1

Ahora, si intentas insertar ('vino' 1) nuevamente, informará una violación de restricción Espero que esto ayude


4
2017-08-03 12:56



Si quiere evitar duplicados en el futuro. Crea otra columna, di id2.

UPDATE tablename SET id2 = id;

Ahora agregue el único en dos columnas:

alter table tablename add unique index(columnname, id2);

1
2018-03-09 13:04



Para agregar un índice único siguiente se requieren:

1) table_name
2) index_name
3) columnas en las que desea agregar índice

ALTER TABLE  `tablename` 
ADD UNIQUE index-name
(`column1` ,`column2`,`column3`,...,`columnN`);

En su caso, podemos crear un índice único de la siguiente manera:

ALTER TABLE `votes`ADD 
UNIQUE <votesuniqueindex>;(`user` ,`email`,`address`);

1
2017-07-10 08:22