2011-07-20 10 views
9

Mam tabelę w MySQL z 30 kolumnami i tysiącami wpisów.
Czy istnieje sposób, aby każdy wiersz był unikalny, co oznacza, że ​​jeśli wiersz już istnieje, nie powinienem być w stanie ponownie wejść do tego wiersza.Czy istnieje sposób na uniknięcie całego wiersza MySQL?

Nie mogę tutaj użyć kluczy podstawowych ani unikalnych, ponieważ każda kolumna może być powtarzana indywidualnie.
Chcę, aby rząd był wyjątkowy. na przykład: -Są to tabela z

columns->name,age,height,weight. 

W tej kolumnie nie może dokonywać żadnych jedna lub dwie kolumny wyjątkowy, ale nie powinny mieć dwa wpisy z wszystkich tych samych danych.

+0

Należy pamiętać, że [ERROR 1071] (http://stackoverflow.com/questions/1814532/1071-specyfikowany-key- był-to-long-max-key-length-jest-767-bytes/16820166#16820166) gdzie łączenie tak wielu kolumn może powodować problemy. – roundar

Odpowiedz

10

Potrzebujesz złożonego klucza podstawowego.

Złożony klucz podstawowy mówi MySQL, że chcesz, aby klucz podstawowy był kombinacją pól.

Więcej informacji tutaj: Why use multiple columns as primary keys (composite primary key)

+0

OP mówi, że nie może używać kluczy podstawowych w tym celu. –

+1

@Raj Więcej: Z pytania wygląda na to, że OP uważa, że ​​PK lub UK tylko może zastosować do pojedynczej kolumny na raz, więc myślę, że jest to poprawna odpowiedź. –

+0

Masz rację, @Anders Abel. Właśnie dlatego przegłosowałem. –

2

Można zrobić unikatowy indeks na więcej niż jednej kolumnie. Po prostu umieść wszystkie kolumny w indeksie. Jeśli kolumny są duże, możesz napotkać problemy z maksymalną długością indeksu, ale spróbuj najpierw i zobacz.

17

Można zrobić unikatowy indeks, który zawiera wszystkie kolumny w tabeli

ALTER TABLE buyers ADD UNIQUE idx_row_unique(first_name,last_name,...); 

W ten sposób można zachować wyjątkową AUTO INCREMENT podstawowy klucz do przyłączenia się do celów, przy jednoczesnym zapewnieniu, że wszystkie dane w stół jest wyjątkowy.

+0

Problem polega na tym, że indeksy mają maksymalną długość, a bardzo długie indeksy są nieefektywne. –

4

Możesz utworzyć UNIQUE key we wszystkich kolumnach, a nie poszczególne unikalne klucze w każdej kolumnie. Oznacza to, że kombinacja wartości będzie unikalna - dokładnie to, czego potrzebujesz. Należy jednak pamiętać, że jeśli jakakolwiek kolumna dopuszcza wartość pustą, jeśli kolumna zawiera wartość null, zostanie policzona jako unikalna, nawet jeśli inny wiersz zawiera te same wartości, z wartością null dla tej samej wartości.

Powiązane problemy