multiple index foreign ejemplo constraint columns mysql unique unique-key

index - unique mysql ejemplo



# 1062-Duplique la entrada '''' para la clave ''unique_id'' cuando intente agregar UNIQUE KEY(MySQL) (6)

Tengo un error en MySQL al intentar agregar una CLAVE ÚNICA. Esto es lo que estoy tratando de hacer. Tengo una columna llamada ''unique_id'' que es VARCHAR (100). No hay índices definidos en la tabla. Estoy recibiendo este error:

#1062 - Duplicate entry '''' for key ''unique_id''

Cuando intento agregar una clave ÚNICA. Aquí hay una captura de pantalla de cómo lo estoy configurando en phpMyAdmin:

Aquí está la consulta de MySQL que genera phpMyAdmin:

ALTER TABLE `wind_archive` ADD `unique_id` VARCHAR( 100 ) NOT NULL FIRST , ADD UNIQUE ( `unique_id` )

He tenido este problema en el pasado y nunca lo resolví, así que simplemente reconstruí la tabla desde cero. Desafortunadamente, en este caso no puedo hacerlo ya que hay muchas entradas en la tabla. ¡Gracias por tu ayuda!


El error lo dice todo:

Duplicate entry ''''

Así que ejecuta la siguiente consulta:

SELECT unique_id,COUNT(unique_id) FROM yourtblname GROUP BY unique_id HAVING COUNT(unique_id) >1

Esta consulta también te mostrará el problema.

SELECT * FROM yourtblname WHERE unique_id=''''

Esto le mostrará dónde hay valores que tienen duplicados. Está intentando crear un índice único en un campo con duplicados. Deberá resolver primero los datos duplicados y luego agregar el índice.


Esta es la tercera vez que busco una solución a este problema, así que para la referencia, estoy publicando la respuesta aquí.

Dependiendo de los datos, podemos usar la palabra clave IGNORE con el comando Alter. Si se especifica IGNORE, solo se utiliza la primera fila de filas con duplicados en una clave única, se eliminan las otras filas en conflicto. Los valores incorrectos se truncan al valor aceptable coincidente más cercano.

La extensión de la IGNORE clave IGNORE para MySQL parece tener un error en la versión InnoDB en alguna versión de MySQL.

Siempre se puede convertir a MyISAM, IGNORE-ADD el índice y luego volver a convertir a InnoDB

ALTER TABLE table ENGINE MyISAM; ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field); ALTER TABLE table ENGINE InnoDB;

Tenga en cuenta que si tiene restricciones de clave externa, esto no funcionará, tendrá que eliminarlas primero y volver a agregarlas más tarde.


Haga unique_id NULL desde NOT NULL y resolverá su problema


Recibía el mismo error (entrada duplicada '''' para la clave ''unique_id'') al intentar agregar una nueva columna como única "después de" Ya había creado una tabla que solo contiene nombres de museos. Quería volver atrás y agregar un código único para cada nombre de museo, con la intención de insertar los valores del código uno a la vez. Mala planificación de la mesa por mi parte. Mi solución fue agregar la nueva columna sin hacerla única; luego ingresó los datos para cada código una fila a la vez; y luego cambiando la estructura de la columna para hacerla única para futuras entradas. Por suerte solo había 10 filas.


debido a que escribes en tu consulta, unique_id NO ES NULO y las filas anteriores son nulas y quieres que esta columna sea única; luego, después de ejecutar esta consulta, tienes varias filas con el mismo valor, lo que significa que esta columna no es única. entonces tiene que cambiar unique_id NOT NULL a unique_id NULL en su consulta.


select ID from wind_archive where ID not in (select max(ID) from wind_archive group by unique_id)

y esto es lo que debe eliminar de la tabla antes de agregar con éxito la clave única. Esto también funciona para agregar una clave única con 2 o más columnas. como -

delete from wind_archive where ID in ( select * from (select ID from wind_archive where ID not in ( select max(ID) from wind_archive group by lastName, firstName ) ORDER BY ID ) AS p );