MySQL中的条件复合密钥?
所以我有一个带有复合键的表,基本上“userID”-“data”必须是唯一的(参见我的另一个问题) 然而,我想知道是否只有当userID不为零时才可以使其生效?我的意思是,‘userID’—‘data’对于非零userID必须是唯一的 还是我找错树了 谢谢MySQL中的条件复合密钥?,sql,mysql,conditional,composite-key,Sql,Mysql,Conditional,Composite Key,所以我有一个带有复合键的表,基本上“userID”-“data”必须是唯一的(参见我的另一个问题) 然而,我想知道是否只有当userID不为零时才可以使其生效?我的意思是,‘userID’—‘data’对于非零userID必须是唯一的 还是我找错树了 谢谢 MalaSQL约束适用于表中的每一行。不能基于某些数据值使它们有条件 但是,如果可以使用NULL而不是零,则可以绕过唯一约束。唯一约束允许多个具有NULL的条目。原因是唯一性意味着不可能存在两个相等的值。相等意味着value1=value2必
MalaSQL约束适用于表中的每一行。不能基于某些数据值使它们有条件 但是,如果可以使用
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');
太棒了,谢谢!正如我所说,我使用了不同的解决方案,但你对我的问题给了我一个完美的答案,我将来肯定会使用它=)