2013-06-27 50 views
16

I tabeli z kolumny 4Jak nadać unikalne ograniczenie połączeniu kolumn w Oracle?

Każda kolumna jest A, B, C, D

Kolumna A jest podstawowy klucz. Kolumna B ma unikalne ograniczenie nazwy.

Teraz chcę usunąć unikalne ograniczenie dla kolumny B i podać unikalne ograniczenie przez połączenie kolumn B, C i D. Tak więc tabela pozwoli tylko jeden wiersz o określonej wartości w kolumnach B, C i D.

Jak mogę podać ten rodzaj ograniczenia?

Próbowałem dając unikalny klucz kompozytowego jak:

ALTER TABLE TABLENAME ADD CONSTRAINT CONSTRAINT_NAME UNIQUE (COLUMN_B, COLUMN_C, COLUMN_D) 

Ale to jest sprawdzanie, czy którekolwiek z tych ograniczeń jest obecny zamiast sprawdzania kombinacji unikalność klucza.

+0

@Naveen dałem ograniczenie jak powiedziałeś .. ale wydaje się, że ograniczenie sprawdza tylko jednego z nazwami kolumn ... Chcę, aby był taki, jak nowy wiersz nie będzie mógł wejść do wszystkich trzech wartości kolumn już istniejących w tabeli. –

+1

hai @nigelthomas Zobacz ten link http://stackoverflow.com/questions/1109614/how-can-i-create-a-sql-unique-constraint-based-on-2-columns –

Odpowiedz

33

stworzyć unikalny klucz na tych kolumnach

ALTER TABLE YourTable 
    add CONSTRAINT YourTable_unique UNIQUE (B, C, D); 

Oracle/PLSQL: Unique Constraints

+0

Co to jest konwencja nazewnictwa? Co jeśli masz dwie niepowiązane unikalne wartości w tabeli? Wtedy nazwa "YourTable_unique" będzie taka sama. –

+0

@PhilipRego, masz rację, komentując. Konwencja nazewnictwa zależy od zespołu, firmy i użytkownika. To tylko przykład. – saamorim

5

Przede wszystkim powinieneś usunąć istniejące ograniczenie, używając opcji ZMIEŃ zapytanie.

ALTER TABLE table_name 
    DROP CONSTRAINT myUniqueConstraint; 

Teraz można utworzyć UNIQUE Wiązanie za pomocą słowa kluczowego UNIQUE z kombinacji wymaganych kolumn.

na przykład:

ALTER TABLE table_name 
    ADD CONSTRAINT myUniqueConstraint UNIQUE(B, C, D); 

Detailed explanation of UNIQUE Constraint here.

+0

http://stackoverflow.com/questions/1109614/how-can-i-create-a-sql-unique-based-based-on-2-columns –

0

ALTER TABLE nazwa_tabeli DROP CONSTRAINT nazwa_więzła;

tworzyć unikalne INDEX constraint_name ON table_name (B, C, D)