唯一约束列是否可以包含2个或更多空值? (Oracle)的

时间:2016-10-13 17:09:08

标签: sql oracle11g

是否可以在唯一约束列中包含2个或更多空值?

1 个答案:

答案 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)的行被允许任意次数 - 就像单列案例一样。