MySQL - nadaj istniejącemu polu wyjątkowy charakter

155

Mam już istniejącą tabelę z polem, które powinno być unikalne, ale nie jest. Wiem o tym tylko dlatego, że wprowadzono do tabeli wpis, który miał taką samą wartość jak inny, już istniejący wpis, a to powodowało problemy.

Jak sprawić, by to pole akceptowało tylko unikatowe wartości?

Lothar
źródło

Odpowiedzi:

293
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

MySQL 5.7.4 lub nowszy:

ALTER TABLE mytbl ADD UNIQUE (columnName);

Począwszy od MySQL 5.7.4, klauzula IGNORE dla ALTER TABLE została usunięta, a jej użycie powoduje błąd.

Dlatego upewnij się, że najpierw usunąłeś zduplikowane wpisy, ponieważ słowo kluczowe IGNORE nie jest już obsługiwane.

Odniesienie

WuHoUnited
źródło
62
If IGNORE is specified, only the first row is used of rows with duplicates on a unique key, The other conflicting rows are deleted. Dokumenty
The Scrum Meister
1
Czy istnieje sposób, aby nakazać mu usunięcie wierszy na podstawie określonych kryteriów? A może musiałbyś wykonać wstępne przetwarzanie przed wykonaniem ALTERtego.
corsiKa
7
ALTER IGNOREmoże nadal powodować błąd Duplicate na MySQL w wersji> 5.5 i na InnoDB ze względu na bezpieczeństwo danych. Jeśli jesteś tylko pewien, że zachowanie pierwszego ze zduplikowanych wierszy jest właściwe, spróbuj set session old_alter_table=1. Nie zapomnij go odłożyć. mysqlolyk.wordpress.com/2012/02/18/…
michaelliu
2
Dla każdego, kto natknie się na to używając 5.6.7 lub nowszego, IGNORE nie jest już obsługiwane. moredocs Myślę, że sposobem na to teraz jest upewnienie się, że nie masz duplikatów, prawda?
William T. Mallard
1
Przed uruchomieniem tego zapytania należy wykonać kopię zapasową tabeli. Spowoduje to usunięcie wszystkich wierszy z wyjątkiem pierwszego, jeśli nazwa kolumny ma takie same wartości lub jest pusta.
steady_daddy,
34

Po prostu zapisz to zapytanie w swoim db phpmyadmin.

ALTER TABLE TableName ADD UNIQUE (FieldName)

Na przykład: ALTER TABLE user ADD UNIQUE (email)

Rizwan Shamsher Kaim Khani
źródło
16

Jeśli chcesz również nazwać ograniczenie, użyj tego:

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);
ypercubeᵀᴹ
źródło
7

CREATE UNIQUE INDEX foo ON table_name (field_name)

Musisz usunąć zduplikowane wartości z tej kolumny przed wykonaniem tego sql. Każda istniejąca zduplikowana wartość w tej kolumnie doprowadzi do błędu mysql 1062

Zulan
źródło
4

Najłatwiejszym i najszybszym sposobem byłoby użycie tabeli struktur phpmyadmin.

UŻYJ PANELU ADMINISTRACYJNEGO PHPMYADMIN!

Tam jest w języku rosyjskim, ale w wersji angielskiej powinno być to samo. Wystarczy kliknąć przycisk Unikalny. Z tego miejsca możesz również ustawić kolumny jako PODSTAWOWE lub USUŃ.

MKA
źródło
2
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

to właściwa odpowiedź

część wkładana

INSERT IGNORE INTO mytable ....
user3772326
źródło
1

Ten kod ma rozwiązać nasz problem polegający na ustawieniu unikalnego klucza dla istniejącej tabeli

alter ignore table ioni_groups add unique (group_name);
KARTHIKEYAN.A
źródło
Ale usuwa wszystkie duplikaty, w tym te spoza kolumn
Biasi Wiga