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?

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


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)


16

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

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);

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


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Ń.


2
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

to właściwa odpowiedź

część wkładana

INSERT IGNORE INTO mytable ....

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);

Ale usuwa wszystkie duplikaty, w tym te spoza kolumn
Biasi Wiga
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.