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