2010-01-13 26 views
6

所以我有此表的複合鍵,基本上是「用戶ID」 - 「數據」必須是唯一的(見我的其他問題SQL table - semi-unique row?MySQL中的條件組合鍵?

不過,我想知道是否有可能使這隻生效當用戶ID不是零?我的意思是,'userID' - 'data'對於非零userIDs必須是唯一的嗎?

還是我吠叫錯了樹?

感謝
麻辣

回答

5

SQL限制適用於表中的每一行。根據某些數據值,您不能使它們成爲條件。

但是,如果您可以使用NULL而不是零,則可以避開唯一約束。一個唯一的約束允許具有NULL的多個條目。原因是唯一性意味着沒有兩個等於可以存在。平等意味着value1 = value2必須爲真。但在SQL中,NULL = NULL未知,不正確。

CREATE TABLE MyTable (id SERIAL PRIMARY KEY, userid INT, data VARCHAR(64)); 

INSERT INTO MyTable (userid, data) VALUES ( 1, 'foo'); 
INSERT INTO MyTable (userid, data) VALUES ( 1, 'bar'); 
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz'); 

到目前爲止好,現在你可能會認爲下面的語句將違反唯一約束,但他們不這樣做:

INSERT INTO MyTable (userid, data) VALUES ( 1, 'baz'); 
INSERT INTO MyTable (userid, data) VALUES (NULL, 'foo'); 
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz'); 
INSERT INTO MyTable (userid, data) VALUES (NULL, 'baz'); 
+0

真棒,謝謝!正如我所說我使用了不同的解決方案,但是你給了我一個完美的答案來解決我的問題,我將來會毫無疑問地使用它=) – Mala 2010-01-25 01:40:42