Mysql
 sql >> Database >  >> RDS >> Mysql

Mysql - Impedire voci duplicate di colonne combinate con indice univoco

La tua domanda:"Posso ottenere questo risultato con una query mysql utilizzando un indice univoco? "

La risposta è sì al 100%.

Esistono due modi per creare un indice:

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

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

Tuttavia, questo funzionerà solo se la tabella non ha dati duplicati esistenti. Altrimenti riceverai un messaggio di errore come questo:

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

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

Pertanto, è necessario:

  1. crea una nuova tabella vuota simile ai tuoi targets tabella.
  2. crea un indice univoco.
  3. INSERT IGNORE dati dalla vecchia tabella.
  4. Rinomina targets a targets_old e targets_new a targets .

Esempio:

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;