2013-04-24 8 views

risposta

7

No, non è ammissibile.

il seguente SQL:

ALTER TABLE `table` 
ADD UNIQUE (`column`) 

genererà il seguente errore:

#1062 - Duplicate entry 'data' for key 'column'

È possibile identificare i duplicati utilizzando:

SELECT * FROM `table` 
GROUP BY `column` 
HAVING COUNT(`column`) > 1 

Dopo aver rimosso tutti i duplicati, è possibile aggiungi il vincolo UNIQUE.

+2

Nota - Questo rimuoverà tutti i record che hanno quel particolare valore. Potresti semplicemente voler eliminare tutti tranne uno. –

0

non è possibile:

Mysql2::Error: Duplicate entry 'foo' for key 'index_clubs_on_url': CREATE UNIQUE INDEX `index_clubs_on_url` ON `clubs` (`url`) 
2

In realtà è possibile, almeno in MySQL 5.1+. È possibile utilizzare:

ALTER IGNORE TABLE `table` ADD UNIQUE INDEX (`column`); 

Se la tabella è InnoDB è necessario eseguire questo prima:

set session old_alter_table=1 

riferimento http://www.mikeperham.com/2012/03/02/deleting-duplicate-rows-in-mysql/

EDIT: A partire da MySQL 5.7.4, la clausola IGNORE per ALTER TABLE è stato rimosso e il suo utilizzo produce un errore. Grazie a @EdwardvanKuik per Indicarlo nei commenti

+1

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

Problemi correlati