gpt4 book ai didi

sql - MySQL 中的条件复合键?

转载 作者:可可西里 更新时间:2023-11-01 06:37:41 26 4
gpt4 key购买 nike

所以我有这个带有复合键的表,基本上'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');

关于sql - MySQL 中的条件复合键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2057216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com