是否可以在唯一约束列中包含2个或更多空值?
答案 0 :(得分:14)
易于检查:(答案是肯定的)
create table t1 (col1 number unique);
Table T1 created.
insert into t1 values (1);
1 row inserted.
insert into t1 values (null);
1 row inserted.
insert into t1 values (null);
1 row inserted.
select rownum, col1 from t1;
ROWNUM COL1
---------- ----------
1 1
2
3
3 rows selected.
编辑:虽然上面显示的是当唯一约束中只涉及一列时的答案,但也可以有复合唯一键(在表级定义的约束,而不是列级别) - 涉及两个或更多列)。在这种情况下,如果说唯一键是打开的(col1,col2,col3),那么(1,1,0)和(1,1,3)不是重复的,因为它们在每个位置都不相同。在这种情况下,允许(1,1,null),但只允许一次。但是,列中null“value”的正确“泛化”是ALL ALLREE列中的ALL值为null。在这方面,唯一键列中具有“空值”的行仍然允许任意次。
即:允许(1,1,null),但不超过一次,组成唯一键的三列中包含值(null,null,null)的行被允许任意次数 - 就像单列案例一样。