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:
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!
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.
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.
Machen Sie unique_id
NULL
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
);
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.
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.