web-dev-qa-db-ger.com

# 1062 - Doppelter Eintrag '' für Schlüssel 'unique_id' beim Versuch, UNIQUE KEY (MySQL) hinzuzufügen

Beim Versuch, einen UNIQUE KEY hinzuzufügen, ist ein Fehler in MySQL aufgetreten. Hier versuche ich zu tun. Ich habe eine Spalte namens 'unique_id', die VARCHAR (100) ist. In der Tabelle sind keine Indizes definiert. Ich erhalte diesen Fehler:

#1062 - Duplicate entry '' for key 'unique_id' 

Wenn ich versuche, einen UNIQUE-Schlüssel hinzuzufügen. Hier ist ein Screenshot, wie ich es in phpMyAdmin einrichte:

enter image description here

Hier ist die MySQL-Abfrage, die von phpMyAdmin generiert wird:

ALTER TABLE  `wind_archive` ADD  `unique_id` VARCHAR( 100 ) NOT NULL FIRST ,
ADD UNIQUE (
`unique_id`
)

Ich hatte dieses Problem in der Vergangenheit und habe es noch nie gelöst, also habe ich den Tisch von Grund auf neu aufgebaut. Leider kann ich das in diesem Fall leider nicht tun, da die Tabelle bereits viele Einträge enthält. Danke für Ihre Hilfe!

24
MillerMedia

Der Fehler sagt alles:

Duplicate entry '' 

Führen Sie also die folgende Abfrage aus:

SELECT unique_id,COUNT(unique_id)
FROM yourtblname
GROUP BY unique_id
HAVING COUNT(unique_id) >1

Diese Abfrage zeigt Ihnen auch das Problem

SELECT *
FROM yourtblname
WHERE unique_id=''

Dies zeigt Ihnen, wo es Werte gibt, die Duplikate haben. Sie versuchen, einen eindeutigen Index für ein Feld mit Duplikaten zu erstellen. Sie müssen zuerst die doppelten Daten auflösen und dann den Index hinzufügen.

32
Namphibian

Dies ist das dritte Mal, dass ich nach einer Lösung für dieses Problem suche. Deshalb werde ich hier die Antwort veröffentlichen.

Abhängig von den Daten können wir das Schlüsselwort IGNORE mit dem Befehl Alter verwenden. Wenn IGNORE angegeben ist, wird nur die erste Zeile von Zeilen mit Duplikaten für einen eindeutigen Schlüssel verwendet. Die anderen in Konflikt stehenden Zeilen werden gelöscht. Falsche Werte werden auf den am besten passenden akzeptablen Wert gekürzt.

Die IGNORE-Schlüsselworterweiterung für MySQL scheint einen Fehler in der InnoDB-Version zu haben bei einigen MySQL-Versionen.

Sie können immer nach MyISAM konvertieren, IGNORE-ADD den Index und dann wieder nach InnoDB konvertieren

ALTER TABLE table ENGINE MyISAM;
ALTER IGNORE TABLE table ADD UNIQUE INDEX dupidx (field);
ALTER TABLE table ENGINE InnoDB;

Wenn Sie über Fremdschlüsseleinschränkungen verfügen, funktioniert dies nicht. Sie müssen diese zuerst entfernen und später wieder hinzufügen.

13
RQube

Machen Sie unique_idNULL aus NOT NULL und es wird Ihr Problem lösen

select ID from wind_archive 
where ID not in (select max(ID) from wind_archive group by unique_id) 

und dies ist, was Sie aus der Tabelle entfernen sollten, bevor Sie den eindeutigen Schlüssel erfolgreich hinzugefügt haben. 

delete from wind_archive 
where ID in (
select * from (select ID from wind_archive where ID not in (
select max(ID) from wind_archive group by lastName, firstName
) ORDER BY ID
) AS p
);
1
Ning Yu Fisher

Ich habe den gleichen Fehler erhalten (doppelter Eintrag '' für Schlüssel 'unique_id'), als ich versuchte, eine neue Spalte als eindeutig hinzuzufügen, nachdem ich bereits eine Tabelle erstellt hatte, die nur die Namen von Museen enthält. Ich wollte zurückgehen und einen eindeutigen Code für jeden Museumsnamen hinzufügen, um die Code-Werte nacheinander einzufügen. Schlechte Tischplanung meinerseits ……. Meine Lösung bestand darin, die neue Spalte hinzuzufügen, ohne sie einzigartig zu machen. gaben dann die Daten für jeden Code Zeile für Zeile ein; und ändern Sie dann die Spaltenstruktur, um sie für zukünftige Einträge eindeutig zu machen. Zum Glück gab es nur 10 Reihen.

0
T. Bulford

da Sie in Ihre Abfrage schreiben, muss unique_id NOT NULL sein und die vorherigen Zeilen sind alle null und Sie möchten, dass diese Spalte eindeutig ist. Wenn Sie diese Abfrage ausführen, haben Sie mehrere Zeilen mit demselben Wert. Diese Spalte ist nicht eindeutig. Dann müssen Sie unique_id NOT NULL in unique_id NULL in Ihrer Abfrage ändern. 

0
a.miadian