我有一个如下表:
create table my_table (
id int8 not null,
id_A int8 not null,
id_B int8 not null,
id_C int8 null,
constraint pk_my_table primary key (id),
constraint u_constrainte unique (id_A, id_B, id_C)
);
我想(id_A, id_B, id_C)
在任何情况下都与众不同。因此,以下两个插入必须导致错误:
INSERT INTO my_table VALUES (1, 1, 2, NULL);
INSERT INTO my_table VALUES (2, 1, 2, NULL);
但这并没有达到预期的效果,因为根据文档,两个NULL
值没有相互比较,因此两个插入均正确无误。
我怎么能保证我的唯一约束,即使id_C
可以NULL
在这种情况下?实际上,真正的问题是:我可以在“纯sql”中保证这种唯一性,还是必须在更高级别上实现(在我的情况下为java)?
(1,2,1)
并且(1,2,2)
在(A,B,C)
列中。是否(1,2,NULL)
应允许添加?