2010-01-13 27 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