Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Mysql - Evitando entradas duplicadas de colunas combinadas com índice exclusivo


Sua pergunta:"Posso conseguir isso com uma consulta mysql usando um índice exclusivo? "

A resposta é 100% sim.

Existem duas maneiras de criar índice:
1. CREATE UNIQUE INDEX index_name
ON table_name (column1, column2, ...);

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

No entanto, isso só funcionará se sua tabela não tiver dados duplicados existentes. Caso contrário, você receberá uma mensagem de erro como esta:
Query: CREATE UNIQUE INDEX index_name ON targets (a, b)

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

Portanto, você precisa:
  1. crie uma nova tabela vazia semelhante aos seus targets tabela.
  2. crie um índice exclusivo.
  3. INSERT IGNORE dados da tabela antiga.
  4. Renomear targets para targets_old e targets_new para targets .

Exemplo:
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;