MySQL - Rendi unico un campo esistente


155

Ho una tabella già esistente con un campo che dovrebbe essere unico ma non lo è. Lo so solo perché nella tabella è stata inserita una voce che aveva lo stesso valore di un'altra voce, già esistente, e ciò causava problemi.

Come faccio a rendere questo campo solo accettare valori univoci?

Risposte:


293
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

Per MySQL 5.7.4 o successivo:

ALTER TABLE mytbl ADD UNIQUE (columnName);

A partire da MySQL 5.7.4, la clausola IGNORE per ALTER TABLE è stata rimossa e il suo utilizzo produce un errore.

Quindi, assicurati di rimuovere prima le voci duplicate poiché la parola chiave IGNORE non è più supportata.

Riferimento


62
+1 If IGNORE is specified, only the first row is used of rows with duplicates on a unique key, The other conflicting rows are deleted. Documenti
The Scrum Meister

1
C'è un modo per dirgli di eliminare le righe in base a determinati criteri? O avresti bisogno di fare un po 'di preelaborazione prima ALTERdi farlo.
corsiKa

7
ALTER IGNOREpuò ancora dare un errore duplicato sulla versione MySQL> 5.5 e su InnoDB per motivi di sicurezza dei tuoi dati. Se sei sicuro che mantenere la prima delle righe duplicate sia la cosa giusta, prova set session old_alter_table=1. Non dimenticare di ripristinarlo. mysqlolyk.wordpress.com/2012/02/18/…
michaelliu,

2
Per chiunque inciampare su questo utilizzando 5.6.7 o versioni successive, IGNORE non è più supportato. moredocs Immagino che il modo per farlo ora sia assicurarsi di non avere duplicati prima, no?
William T. Mallard,

1
Assicurarsi di eseguire una copia di backup della tabella prima di eseguire questa query. Eliminerà tutte le righe tranne la prima se il nome colonna ha gli stessi valori o è vuoto.
steady_daddy,

34

Scrivi questa query nel tuo db phpmyadmin.

ALTER TABLE TableName ADD UNIQUE (FieldName)

Per esempio: ALTER TABLE user ADD UNIQUE (email)


16

Se vuoi anche nominare il vincolo, usa questo:

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);

7

CREATE UNIQUE INDEX foo ON table_name (field_name)

Devi rimuovere i valori duplicati su quella colonna prima di eseguire quel sql. Qualsiasi valore duplicato esistente su quella colonna ti porterà all'errore mysql 1062


4

Il modo più semplice e veloce sarebbe con la tabella della struttura phpmyadmin.

UTILIZZA IL PANNELLO AMMINISTRATORE PHPMYADMIN!

Lì è in lingua russa ma in inglese la versione dovrebbe essere la stessa. Basta fare clic sul pulsante Unico. Inoltre da lì puoi rendere le tue colonne PRIMARY o DELETE.


2
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

è la risposta giusta

la parte dell'inserto

INSERT IGNORE INTO mytable ....

1

Questo codice serve a risolvere il nostro problema per impostare una chiave univoca per la tabella esistente

alter ignore table ioni_groups add unique (group_name);

Ma rimuove tutti i duplicati inclusi quelli esterni alle colonne
Biasi Wiga,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.