2013-03-06 12 views
31

Chcę dodać złożony klucz unikalny do istniejącej tabeli. Klucz zawiera 4 pola (identyfikator użytkownika, identyfikator gry, data, godzina). Ale tabela ma nietypowe wiersze. Rozumiem, że mogę usunąć wszystkie zduplikowane daty, a następnie dodać złożony klucz.Jak dodać unikalny klucz do istniejącej tabeli (z wierszami niejednoznacznymi)

Może istnieć inne rozwiązanie bez przeszukiwania wszystkich duplikatów danych. (jak dodaj unikalne ignorowanie itp.).

UPD Szukałem, w jaki sposób można usunąć zduplikowane wiersze mysql - myślę, że to dobre rozwiązanie. Remove duplicates using only a MySQL query?

+1

Nie można mieć duplikaty jeśli stworzyć unikalny klucz. – Tchoupi

Odpowiedz

75

Można zrobić jak yantar adviced

ALTER TABLE TABLE_NAME ADD Id INT IDENTITY(1,1) PRIMARY KEY 

LUB

Możesz dodać ograniczenie

ALTER TABLE TABLE_NAME ADD CONSTRAINT constr_ID UNIQUE (user_id, game_id, date, time) 

Ale myślę nie tracisz istniejących danych, możesz dodać kolumnę indentity, a następnie utworzyć klucz złożony.

+0

co to jest kolumna IDENTYFIKACJA? Nie mogę znaleźć żadnego odniesienia w dokumencie poza czymś związanym z AUTO_INCREMENT: http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html – challet

+1

Jak wspomniano przez @challet słowo kluczowe w MySQL NIE jest TOŻSAMOŚĆ, ale AUTO_INCREMENT. http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html – MER

2

Utwórz identyfikator automatyczny lub identyfikator UNIQUE i dodaj go do klucza naturalnego, o którym mówisz za pomocą 4 pól. uczyni każdy wiersz w tabeli unikalnej ...

3

Dostarczam swoje rozwiązanie z założeniem na temat logiki biznesowej. Zasadniczo w moim projekcie pozwolę tabeli przechowywać tylko jeden rekord dla kombinacji gier użytkownika. Więc dodam klucz złożony do stołu.

PRIMARY KEY (`user_id`,`game_id`) 
+0

Nie, to nie dla mnie. – yAnTar

7

Musiałem rozwiązać podobny problem. Odziedziczyłem dużą tabelę źródłową z MS Access z prawie 15000 rekordów, które nie miały klucza głównego, który musiałem znormalizować i uczynić CakePHP kompatybilnym. Jedną z konwencji CakePHP jest to, że każda tabela ma klucz podstawowy, że jest to pierwsza kolumna i że nazywa się ją "id". Poniższy proste stwierdzenie wystarczyły mi pod MySQL 5.5:

ALTER TABLE `database_name`.`table_name` 
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT FIRST, 
ADD PRIMARY KEY (`id`); 

Ta dodana nowa kolumna „id” typu INTEGER przed istniejących danych („FIRST” kluczowych). Słowo kluczowe AUTO_INCREMENT zwiększa identyfikatory zaczynające się od 1. Teraz każdy zestaw danych ma unikalny numeryczny identyfikator. (Bez instrukcji AUTO_INCREMENT wszystkie wiersze zawierają identyfikator = 0).

0

Należy wystrzegać się jedynie dodania klucza UNIQUE, ponieważ akceptuje on więcej niż jedną wartość NULL.

4

ALTER TABLE 0_value_addition_setup ADD UNIQUE ( value_code )

+6

Chociaż ten kod może pomóc w rozwiązaniu problemu, nie wyjaśnia, dlaczego _why_ i/lub _how_ to odpowiada na pytanie. Zapewnienie tego dodatkowego kontekstu znacznie poprawiłoby jego długoterminową wartość edukacyjną. Proszę [edytuj] swoją odpowiedź, aby dodać wyjaśnienie, w tym, jakie ograniczenia i założenia mają zastosowanie. –

Powiązane problemy