6
所以我有此表的複合鍵,基本上是「用戶ID」 - 「數據」必須是唯一的(見我的其他問題SQL table - semi-unique row?)MySQL中的條件組合鍵?
不過,我想知道是否有可能使這隻生效當用戶ID不是零?我的意思是,'userID' - 'data'對於非零userIDs必須是唯一的嗎?
還是我吠叫錯了樹?
感謝
麻辣
所以我有此表的複合鍵,基本上是「用戶ID」 - 「數據」必須是唯一的(見我的其他問題SQL table - semi-unique row?)MySQL中的條件組合鍵?
不過,我想知道是否有可能使這隻生效當用戶ID不是零?我的意思是,'userID' - 'data'對於非零userIDs必須是唯一的嗎?
還是我吠叫錯了樹?
感謝
麻辣
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');
真棒,謝謝!正如我所說我使用了不同的解決方案,但是你給了我一個完美的答案來解決我的問題,我將來會毫無疑問地使用它=) – Mala 2010-01-25 01:40:42