restricciones restriccion quitar llave foreign foranea ejemplo datos constraint mysql unique-constraint composite-key database-table

restriccion - ¿Cómo especifico una restricción única para varias columnas en MySQL?



restriccion default en base de datos (11)

Tengo una mesa

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

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

¿Cómo hago esto en MySql?

  • Por supuesto que el ejemplo es solo ... un ejemplo. Así que por favor no te preocupes por la semántica.

¿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`);


Lo hago así:

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

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


Los índices únicos de múltiples 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 trabajar en los índices de varias columnas. Sí, el comportamiento es una locura, porque limita muchas aplicaciones legítimas de índices de varias columnas, pero es lo que es ... Hasta ahora, es un error que se ha marcado con "no se solucionará" en MySQL pista de errores ...


MySql 5 o superior se comporta de esta manera (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 es
  • al evaluar una restricción de este tipo, puede tener (A, null) tantas veces como desee (¡el mismo valor A!)
  • solo puede tener un par (A, no nulo B)

Ejemplo: PRODUCT_NAME, PRODUCT_VERSION ''glass'', null ''glass'', null ''wine'', 1

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


Para agregar un índice único se requieren los siguientes:

1) nombre_tabla
2) nombre_índice
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`);


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 de estructura para su tabla de destino. Agregue un índice único a una de las columnas. Expanda la lista de Í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.


Si desea evitar duplicados en el futuro. Crea otra columna que diga id2.

UPDATE tablename SET id2 = id;

Ahora agregue el único en dos columnas:

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


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) );


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 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 siga siendo así.


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