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

Shu*_*and 11 sql oracle11g

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

mat*_*guy 17

易于检查:(答案是肯定的)

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.
Run Code Online (Sandbox Code Playgroud)

编辑:虽然上面显示的是当一个唯一约束中只涉及一列时的答案,但也可以有复合唯一键(在表级别定义的约束,而不是列级别 - 涉及两个或更多列).在这种情况下,如果说唯一键是打开的(col1,col2,col3),那么(1,1,0)和(1,1,3)不是重复的,因为它们在每个位置都不相同.在这种情况下,允许(1,1,null),但只允许一次.但是,列中null"value"的正确"泛化"是ALL ALLREE列中的ALL值为null.在这方面,唯一键列中具有"空值"的行仍然允许任意次.

即:虽然允许(1,1,null),但不超过一次,组成唯一键的三列中具有值(null,null,null)的行被允许任意次 - 就像在单列情况下.

  • 但是,这不适用于两列或更多列上的唯一索引.例如`create table x1(c1 integer,c2 integer,unique(c1,c2));```insert into x1 values(1,null);``只能执行一次. (2认同)
  • @ShubhamAnand - 如果您关心COMPOSITE唯一约束的规则,答案是您可以有多个带空值的行而不违反唯一约束.但是,唯一键中"空值"的正确概念是所有列都为空,不是某些空值而其他列是非空的.在a_horse的例子中,`insert into x1 values(null,null)`可以完成十次而不会违反唯一约束.对不起,我不知道你的情况与你在问题中的情况有什么不同,或者我会把它放在我的答案中. (2认同)