Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Mysql - Verhindern doppelter Einträge kombinierter Spalten mit Unique Index

Ihre Frage:"Kann ich dies mit einer MySQL-Abfrage mit eindeutigem Index erreichen? "

Antwort ist 100 % ja.

Es gibt zwei Möglichkeiten, einen Index zu erstellen:

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

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

Dies funktioniert jedoch nur, wenn Ihre Tabelle keine vorhandenen doppelten Daten enthält. Andernfalls erhalten Sie eine Fehlermeldung wie diese:

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

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

Daher müssen Sie:

  1. Erstellen Sie eine neue leere Tabelle ähnlich Ihren targets Tabelle.
  2. eindeutigen Index erstellen.
  3. INSERT IGNORE Daten aus der alten Tabelle.
  4. targets umbenennen zu targets_old und targets_new zu targets .

Beispiel:

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;