2016-04-16 10 views
1

たとえば、ユーザーはJHONEという名前を付けて25歳にすることができますので、次回はJHONE、26またはALEX 25を追加できます。SQLは2列のUNIQUEしか設定していません

だから私は別々に2つの列を探しています。

P.S.私は前に同じ質問が言及された場合は申し訳ありません。

EDIT:

これは私の例である:

enter image description here

はuserIdGとdoWithCarこの

102163096246025413003ビュー

1021630のようになりますしたいと思います96246025413003購入

102163096246025413003ましょう

102163096246025413003売る

とid = 102163096246025413003列doWithCarはは、唯一の4つの可能な選択肢のビューを持って購入するので、あなたは、任意の複数の値を追加することはできません、家賃のための

売る

+0

まず、既存の回答を無効にするため、編集しないでください。 2番目は「PhpMyAdmin」のように見えるので、むしろ**「MySQL」**ではない。「Microsoft SQL Server」** 3番目:これは古典的なシャンソン問題である。要約すると 'UNIQUE(userIdG、doWithCar)'が追加されます。 – lad2025

+0

@ lad2025カメレオンのようなものだったら申し訳ありません。私はコンセプトを理解しようとしていますが、残念ながら私はそれを得ていませんでした。それは既存の問題で尋ねます。 –

答えて

3

UNIQUEに複数の列を指定することができます。

CREATE TABLE tab(ID INT IDENTITY(1,1) PRIMARY KEY, name VARCHAR(100), age INT 
       ,UNIQUE(name, age)); 

INSERT INTO tab(name, age) VALUES ('John', 25); 
INSERT INTO tab(name, age) VALUES ('John', 26);     

-- INSERT INTO tab(name,age) VALUES ('John', 25); 
-- Violation of UNIQUE KEY constraint 'UQ__tab__CF0426FD76D3370A'. 
-- Cannot insert duplicate key in object 'dbo.tab'. 
-- The duplicate key value is (John, 25). 
-- The statement has been terminated. 

SELECT * FROM tab; 

LiveDemo

注:

あなたは自分自身を年齢(またはage算出列を作り、UNIQUE(name, dob)を設定)date of birthを保存してはいけません。


これは、データベースがユニークでない各列がこれらは異なる概念です

一意であるとして、それは二つの列でなければならないことを知っているだろうか)私は理解していないものです。 DBは UNIQUE制約定義からそれを知っています:

UNIQUE(userIdG,doWithCar)    -- pair of column is unique 
!= 
UNIQUE(userIdG),UNIQUE(doWithCar)  -- each column is unique 
+0

私は質問を更新しましたので、userIdGとdoWithCarを一意に設定する必要がありますデータベースは、2つの列が一意である必要があり、各列が一意ではないことを認識しますか? –

+0

更新)今)私はALTER TABLE userChioce ADD INDEX UQ_IDDO UNIQUE(userIdG、doWithCar)を使用する必要がありますか? –

+0

ユニークインデックスを作成するUQ_IDDO UNIQUE userChioce(userIdG、doWithCar)をオンにしますか? –