sql >> Base de Datos >  >> RDS >> Mysql

Mysql:prevención de entradas duplicadas de columnas combinadas con índice único

Su pregunta:"¿Puedo lograr esto con una consulta mysql usando un índice único? "

La respuesta es 100 % sí.

Hay dos formas de crear un índice:

1. CREATE UNIQUE INDEX index_name
ON table_name (column1, column2, ...);

2. ALTER TABLE table_name 
ADD UNIQUE index_name (column1, column2, ...);

Sin embargo, esto solo funcionará si su tabla no tiene datos duplicados existentes. De lo contrario, recibirá un mensaje de error como este:

Query: CREATE UNIQUE INDEX index_name ON targets (a, b)

Error Code: 1062
Duplicate entry 'photo-url1' for key 'index_name'

Por lo tanto, necesita:

  1. cree una nueva tabla vacía similar a sus targets mesa.
  2. crear índice único.
  3. INSERT IGNORE datos de la tabla anterior.
  4. Renombrar targets a targets_old y targets_new a targets .

Ejemplo:

CREATE TABLE targets_new LIKE targets;

CREATE UNIQUE INDEX index_name
ON targets_new (a, b);

INSERT IGNORE INTO targets_new SELECT * FROM targets;

RENAME TABLE targets TO targets_old;
RENAME TABLE targets_new TO targets;