问题描述
我有一种情况,我需要组合多个字段来检查唯一性,但需要单独检查唯一性。例如,
为两个字段设置唯一性不会禁止插入 (3) 和 (4),因为唯一性会检查两个字段。我不能将这两个字段作为主键,因为我有一个丰富的架构并且已经有一个唯一的 UUID 作为主键。
解决方法
您需要两个 UNIQUE
约束,每列一个。
与主键不同,您可以在一个表上设置多个唯一约束。要获得与主键相同的行为,请设置列 NOT NULL
。
正如我在评论中提到的,为您的列添加单独的唯一约束,例如
数据样本:
CREATE TABLE t
(c1 TEXT UNIQUE,c2 INT UNIQUE);
这些插入将起作用。
INSERT INTO t VALUES ('A',1),('B',2);
INSERT 0 2
.. 这些都会失败
INSERT INTO t VALUES ('B',1);
ERROR: duplicate key value violates unique constraint "t_c1_key"
DETAIL: Key (c1)=(B) already exists.
INSERT INTO t VALUES ('A',2);
ERROR: duplicate key value violates unique constraint "t_c1_key"
DETAIL: Key (c1)=(A) already exists.
演示:db<>fiddle