2016-04-16 24 views
1

我想舉個例子,用戶可以添加名字JHONE和年齡25,所以下次他可以添加JHONE,26或ALEX 25,但不是JHONE,25。SQL設置UNIQUE只有兩列

所以我正在尋找兩個獨立的不分開的列。

P.S.如果以前提到過同樣的問題,我很抱歉。

編輯:

這是我的例子:

enter image description here

想使userIdG和doWithCar會是這樣

102163096246025413003查看

1021630 96246025413003購買

102163096246025413003讓

102163096246025413003賣

而對於編號= 102163096246025413003你不能添加任何價值,因爲列doWithCar將只有4個可能的選擇來看,購買,租用並出售

+0

首先,不要因爲您使現有答案無效而以這種方式編輯。其次它看起來像'PhpMyAdmin',所以它是** **而不是**'Microsoft SQL Server ** **第三:這是一個典型的chamelon問題。總結一下添加'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

注:

,可以儲存date of birth,而不是年齡本身(或作age計算列,並設置UNIQUE(name, dob))。


這就是我不明白)數據庫將如何知道它應該是兩列獨特的,不是每一列是唯一

這些都是不同的概念。 DB從UNIQUE約束定義中「知道」它:

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

我已經更新了我的問題,所以我需要設置userIdG和doWithCar爲唯一的(這是我不明白的)如何數據庫會知道它應該是兩個獨立的列,而不是每個列都是唯一的? –

+0

更新現在有意義,)))現在我應該使用ALTER TABLE userChioce ADD INDEX UQ_IDDO UNIQUE(userIdG,doWithCar)??? –

+0

CREATE UNIQUE INDEX UQ_IDDO UNIQUE ON userChioce(userIdG,doWithCar)或者像這樣? –