2010-03-23 14 views
8

Mam dwie tabele -> Zmienne (id, nazwa) i Variable_Entries (id, var_id, value).MySQL: Unikalne ograniczenie na wielu polach

Chcę, aby każda zmienna miała unikalny zestaw wpisów. Jeśli wprowadzę wartość unikalną, wtedy inna zmienna nie będzie mogła mieć tej samej wartości, która nie jest właściwa.

Czy jest jakiś sposób, aby kolumna wartości była unikalna dla identycznych zmiennych var_id?

Odpowiedz

9

Tak:

alter table Variable_Entries add unique (var_id, value); 

Teraz masz wyjątkową presję całej var_id i wartości razem. Innymi słowy, żadne wystąpienie var_id i value nie może pojawić się więcej niż jeden raz.

+0

dzięki, i ludzie poniżej zbyt - nigdzie nie mogłem tego znaleźć – Cypher

+0

Czy jest sposób na wymuszenie tego przy tworzeniu stołu? – puk

+2

nie mogą być chcąc wiedzieć, ale przez wzgląd na innych, 'create table tbl_table ( \t id całkowitą not null auto_increment, \t fname varchar (255), lname varchar (255), \t CONSTRAINT tbl_table PRIMARY KEY (id), \t unique (fname, lname)) " –

0

Dodaj unikalny klucz Variable_Entries dla połączonych pól var_id/value.

Należy również zawsze używać pojedynczych słów dla nazw tabel (użytkownik zamiast użytkowników). Nigdy nie używaj wielkich liter w nazwie tabeli, ponieważ spowoduje to NIGHTMARE w różnych systemach operacyjnych.

+0

Zastanawiam się, dlaczego powinniśmy zawsze używać liczby pojedynczej nazwy dla nazw tabel? –

+0

"Powinieneś zawsze używać pojedynczych słów dla nazw tabel" - nie zgadzam się. Zawsze używam liczby mnogiej i wiem, że nie jestem sam (na przykład ActiveRecord robi to samo). –

+0

CakePHP zależy od liczby mnogiej dla nazw tabel ... To zabawny komentarz :) Wielkie litery, chociaż ... Zgadzam się – luigi7up

6

Tak, można utworzyć kompozyt unique key:

ALTER TABLE variable_entries ADD UNIQUE (var_id, value); 
+0

Dzięki za słowo * composite *, zrozumiałem, co robi. –

Powiązane problemy