Pregunta

Tengo una tabla:

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

Ahora quiero hacer que las columnas usuario, correo electrónico, dirección sean únicas (juntas).

¿Cómo hago esto en MySql?

  • Por supuesto, el ejemplo es solo ... un ejemplo. Así que no te preocupes por la semántica.
¿Fue útil?

Solución

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

Otros consejos

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 `id_box_elements` (`id_box_elements`,`id_router`)
);

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

Estoy ejecutando MySQL 5.1.42, por lo que probablemente hubo alguna actualización sobre el problema discutido anteriormente. Afortunadamente funciona y esperamos que 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 evitarlo en los índices de varias columnas. Sí, el comportamiento es una locura, ya que limita muchas aplicaciones legítimas de índices de varias columnas, pero es lo que es ... Hasta el momento, es un error que se ha sellado con "no se solucionará". en la pista de error de MySQL ...

¿Has probado esto?

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

Esto funciona para mysql versión 5.5.32

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

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

Navegue a la página estructura para su tabla de destino. Agregue un índice único a una de las columnas. Expanda la lista Índices en la parte inferior de la página de estructura para ver el índice único que acaba de agregar. Haga clic en el icono de edición y en el siguiente cuadro de diálogo puede agregar columnas adicionales a ese índice único.

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

  • puede definir restricciones únicas que involucran columnas anulables. Supongamos que define una restricción única (A, B) donde A no es anulable pero B sí
  • al evaluar dicha restricción, puede tener (A, nulo) tantas veces como desee (¡el mismo valor A!)
  • solo puede tener un par (A, no nulo B)

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

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

Lo hago así:

CREATE UNIQUE INDEX index_name ON TableName (Column1, Column2, Column3);

Mi convención para un index_name único es TableName_Column1_Column2_Column3_uindex .

Si desea evitar duplicados en el futuro. Cree otra columna, diga id2.

UPDATE tablename SET id2 = id;

Ahora agregue el exclusivo en dos columnas:

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

Para agregar un índice único se requiere lo siguiente:

1) nombre_tabla
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`);

Si está creando una tabla en mysql, use lo siguiente:

create table package_template_mapping (
mapping_id  int(10) not null auto_increment  ,
template_id int(10) NOT NULL ,
package_id  int(10) NOT NULL ,
remark      varchar(100),
primary key (mapping_id) ,
UNIQUE KEY template_fun_id (template_id , package_id)
);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top