2013-06-27 19 views
16

Ho una tabella con 4 colonneCome assegnare un vincolo univoco a una combinazione di colonne in Oracle?

ogni colonna sarà A, B, C, D

Colonna A è la chiave primaria. La colonna B ha un vincolo di nome univoco.

Ora voglio rimuovere il vincolo univoco per la colonna B e dare un vincolo univoco combinando le colonne B, C e D. Quindi la tabella consentirà solo una riga con un valore particolare nelle colonne B, C e D.

Come posso dare questo tipo di vincolo?

ho provato dando la chiave univoca composito come:

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

Ma sta verificando se uno qualsiasi vincolo è presente piuttosto che controllando la combinazione di restrizione di chiave univoca.

+0

@Naveen ho dato il vincolo, come hai detto .. ma sembra che il vincolo controlla solo uno dei nomi di colonna ... Voglio che sia come se una nuova riga non fosse autorizzata a inserire tutti e tre i valori delle colonne già presenti nella tabella. –

+1

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

risposta

33

Creare una chiave univoca su quelle colonne

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

Oracle/PLSQL: Unique Constraints

+0

Qual è la convenzione di denominazione? Cosa succede se hai due valori univoci non correlati in una tabella? Quindi "YourTable_unique" sarebbe lo stesso nome. –

+0

@PhilipRego, hai ragione sul tuo commento. La convenzione di denominazione spetta al team, alla società, all'utente decidere. È solo un esempio – saamorim

5

Prima di tutto è necessario eliminare un vincolo esistente utilizzando la query ALTER in basso.

ALTER TABLE table_name 
    DROP CONSTRAINT myUniqueConstraint; 

Ora, è possibile creare un vincolo UNIQUE utilizzando la parola chiave UNIQUE con la combinazione di colonne richieste.

Per esempio:

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-constraint-based-on-2-columns –

0

ALTER TABLE nome_tabella DROP CONSTRAINT constraint_name;

CREATE UNIQUE constraint_name INDEX ON nome_tabella (B, C, D)