2010-04-20 74 views
0

我有由三列的(簡化)表:SQL - 如何應用「半獨特」約束?

id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, 
foreignID INT NOT NULL, 
name VARCHAR NOT NULL 

基本上,我想補充的限制(在數據庫級別上,而不是在應用程序級),其中只可以爲一個獨特的「名稱'存在於每個foreignID。例如,給定的數據(ID,foreignid,名):

1,1,Name1 
2,1,Name2 
3,1,Name3 
4,2,Name1 
5,2,Name2 

我想,如果用戶試圖插入另一個「NAME3」 foreignId 1下,如果用戶試圖插入'約束失敗,但成功Name3'在foreignId 2下。由於這個原因,我不能簡單地將整個列設置爲UNIQUE。

我很難想出一個SQL表達式來實現這一點,任何人都可以幫助我嗎?

感謝

回答

3

添加唯一約束(ForeignID, Name)。確切的語法取決於你的DBMS。對於SQL Server:

CREATE UNIQUE INDEX IndexName ON YourTable (ForeignID, Name) 

(術語「唯一約束」,「唯一密鑰」和「唯一索引」的意思大致相同。)

+0

嘿,多數民衆贊成很酷,我不知道你能做到這一點!謝謝! – 2010-04-20 01:20:58

2

創建複合(多 - 列)鍵...這些兩列

Create Unique Index MyIndexName On TableName(ForeignID, Name)