所以我有这个带有复合键的表,基本上'userID'-'data'必须是唯一的(见我的另一个问题SQL table - semi-unique row?)
但是,我想知道是否有可能仅在 userID 不为零时才生效?我的意思是,'userID'-'data' 对于非零用户 ID 必须是唯一的?
还是我在叫错树?
谢谢马拉
_
所以我有这个带有复合键的表,基本上'userID'-'data'必须是唯一的(见我的另一个问题SQL table - semi-unique row?)
但是,我想知道是否有可能仅在 userID 不为零时才生效?我的意思是,'userID'-'data' 对于非零用户 ID 必须是唯一的?
还是我在叫错树?
谢谢马拉
_
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');