MySQL - Machen Sie ein vorhandenes Feld einzigartig

155

Ich habe eine bereits vorhandene Tabelle mit einem Feld, das eindeutig sein sollte, aber nicht eindeutig ist. Ich weiß das nur, weil ein Eintrag in die Tabelle gemacht wurde, der den gleichen Wert wie ein anderer, bereits vorhandener Eintrag hatte, und dies verursachte Probleme.

Wie kann ich dafür sorgen, dass dieses Feld nur eindeutige Werte akzeptiert?

Lothar
quelle

Antworten:

292
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

Für MySQL 5.7.4 oder höher:

ALTER TABLE mytbl ADD UNIQUE (columnName);

Ab MySQL 5.7.4 wird die IGNORE-Klausel für ALTER TABLE entfernt und ihre Verwendung führt zu einem Fehler.

Stellen Sie daher sicher, dass Sie zuerst doppelte Einträge entfernen, da das Schlüsselwort IGNORE nicht mehr unterstützt wird.

Referenz

WuHoUnited
quelle
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. Docs
The Scrum Meister
1
Gibt es eine Möglichkeit, Zeilen nach bestimmten Kriterien zu löschen? Oder müssten Sie vor dem eine Vorverarbeitung durchführen ALTER, um dies zu erledigen.
CorsiKa
7
ALTER IGNOREkann aus Sicherheitsgründen weiterhin einen doppelten Fehler in MySQL Version> 5.5 und in InnoDB geben. Wenn Sie nur sicher sind, dass es richtig ist, die erste der duplizierten Zeilen beizubehalten, versuchen Sie es set session old_alter_table=1. Vergessen Sie nicht, es zurückzusetzen. mysqlolyk.wordpress.com/2012/02/18/…
michaelliu
2
Für alle, die mit 5.6.7 oder höher darauf stoßen, wird IGNORE nicht mehr unterstützt. moredocs Ich denke, der Weg, dies jetzt zu tun, besteht darin, sicherzustellen, dass Sie nicht zuerst Duplikate haben, nein?
William T. Mallard
1
Stellen Sie sicher, dass Sie eine Sicherungskopie der Tabelle erstellen, bevor Sie diese Abfrage ausführen. Es werden alle Zeilen außer der ersten gelöscht, wenn der Spaltenname dieselben Werte hat oder leer ist.
Steady_daddy
34

Schreiben Sie diese Abfrage einfach in Ihre Datenbank phpmyadmin.

ALTER TABLE TableName ADD UNIQUE (FieldName)

Z.B: ALTER TABLE user ADD UNIQUE (email)

Rizwan Shamsher Kaim Khani
quelle
16

Wenn Sie die Einschränkung auch benennen möchten, verwenden Sie Folgendes:

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);
ypercubeᵀᴹ
quelle
7

CREATE UNIQUE INDEX foo ON table_name (field_name)

Sie müssen doppelte Werte in dieser Spalte entfernen, bevor Sie diese SQL ausführen. Jeder vorhandene doppelte Wert in dieser Spalte führt Sie zum MySQL-Fehler 1062

Zulan
quelle
4

Der einfachste und schnellste Weg wäre mit der phpmyadmin-Strukturtabelle.

BENUTZEN SIE PHPMYADMIN ADMIN PANEL!

Dort ist es in russischer Sprache, aber in englischer Sprache sollte es gleich sein. Klicken Sie einfach auf die Schaltfläche Einzigartig. Auch von dort aus können Sie Ihre Spalten PRIMARY oder DELETE machen.

MKA
quelle
2
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

ist die richtige Antwort

das Einsatzteil

INSERT IGNORE INTO mytable ....
user3772326
quelle
1

Dieser Code soll unser Problem lösen, einen eindeutigen Schlüssel für eine vorhandene Tabelle festzulegen

alter ignore table ioni_groups add unique (group_name);
KARTHIKEYAN.A
quelle
Entfernt aber alle Duplikate, auch außerhalb der Spalten
Biasi Wiga