2013-06-27 9 views
16

Iは、各列がA、B、C、DOracleの列の組み合わせに固有の制約を与える方法はありますか?

列Aは、主キーであろう4列

を持つテーブルがあります。 列Bには一意の名前制約があります。

今、私は列B、C、Dを組み合わせることによって一意の制約を与え、列B、C、Dに特定の値を持つ行を1つだけ許可します。

どのようにこのタイプの制約を与えることができますか?

私のような複合一意キーを与えてみました:

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

をしかし、制約のいずれかが、かなりユニークキー制約の組み合わせをチェックするよりも存在するかどうかをチェックしています。

+0

@Naveenを作成...私はそれが3列の値をすべて入力することが許可されていない新しい行のようにしたいテーブルに既に存在する。 –

+1

hai @nigelthomasこのリンクを表示するhttp://stackoverflow.com/questions/1109614/how-can-i-create-a-sql-unique-constraint-based-on-2-columns –

答えて

33

は、それらの列に一意のキーを作成します

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

Oracle/PLSQL: Unique Constraints

+0

命名規則とは何ですか?テーブルに関連性のない2つのユニークな値がある場合はどうなりますか?それで 'YourTable_unique'は同じ名前になります。 –

+0

@PhilipRego、あなたのコメントが正しいです。命名規則は、チーム、企業、ユーザーが決定するまでです。これは単なる例です。 – saamorim

5

まず、以下のALTERクエリを使用して既存の制約を削除する必要があります。

ALTER TABLE table_name 
    DROP CONSTRAINT myUniqueConstraint; 

さて、あなたは必要な列の組み合わせでキーワードUNIQUEを使用してUNIQUE制約を作成することができます。例については

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

0

ALTER TABLEテーブル名DROP CONSTRAINT constraint_name;

あなたは...言われて、私は制約を与えたが、それは、列名のいずれかのための制約のみをチェックしているようですtable_nameの ON UNIQUE INDEXのCONSTRAINT_NAME(B、C、D)

関連する問題