2011-02-18 23 views
101

Tengo una tabla ya existente con un campo que debe ser único pero no lo es. Solo sé esto porque se hizo una entrada en la tabla que tenía el mismo valor que otra entrada ya existente y esto causó problemas.MySQL - Crear un campo existente Único

¿Cómo hago que este campo solo acepte valores únicos?

Respuesta

210
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName); 

Para MySQL 5.7.4 o posterior:

ALTER TABLE mytbl ADD UNIQUE (columnName); 

En MySQL 5.7.4, la cláusula IGNORE para ALTER TABLE se retira y su uso produce una error.

Por lo tanto, asegúrese de eliminar las entradas duplicadas primero ya que la palabra clave IGNORE ya no es compatible.

Reference

+53

+1 'Si se especifica IGNORE, sólo la primera fila se utiliza de duplicados con una clave única, El conflicto de otra las filas se eliminan. [Docs] (http://dev.mysql.com/doc/refman/5.1/en/alter-table.html) –

+1

¿Hay alguna forma de decirle que elimine las filas según ciertos criterios? ¿O necesitarías hacer algún preprocesamiento antes del 'ALTER' para hacer esto? – corsiKa

+0

No sé si hay una manera de elegir uno para mantener durante esta consulta. 'UNIQUE' es una de esas cosas que realmente deberían haberse hecho durante la creación de la base de datos. – WuHoUnited

5

CREATE UNIQUE INDEX foo ON table_name (field_name)

(. Tienes que eliminar valores duplicados antes de eso)

11

Si desea nombrar también la restricción, utilice esto:

ALTER TABLE myTable 
    ADD CONSTRAINT constraintName 
    UNIQUE (columnName); 
26

Sólo tiene que escribir esta consulta en su db phpmyadmin.

ALTER TABLE TableName ADD UNIQUE (FieldName) 

Ejemplo.

ALTER TABLE user ADD UNIQUE (email) 

Gracias

1
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName); 

es la respuesta correcta

la pieza de inserción

INSERT IGNORE INTO mytable .... 
1

La manera más fácil y rápida sería con mesa estructura de phpMyAdmin.

USE PHPMYADMIN ADMIN PANEL!

No Está en idioma ruso, pero en la versión Inglés debe ser el mismo. Simplemente haga clic en el botón Único. También desde allí puedes hacer tus columnas PRIMARY o DELETE.

0

Este código es resolver nuestro problema de establecer clave única para tabla existente

alter ignore table ioni_groups add unique (group_name); 
Cuestiones relacionadas