具有所有空值或所有唯一值的唯一约束

时间:2016-12-01 11:07:18

标签: oracle oracle11g

以下是包含3列

的示例表
(UNIQUE_VALUE, UNIQUE_VALUE1, UNIQUE_GROUP_ID)

我希望以下记录可以被允许:

(NULL, NULL, NULL)
(NULL, NULL, NULL)
or

(3, 5, 7)
(4, 123, 7)

但输入如下所示必须给出错误。

(3, 5, 7)
(3, 5, 7)

请帮忙。

1 个答案:

答案 0 :(得分:3)

您只需使用NULL约束即可允许重复的UNIQUE值:

CREATE TABLE sample (
  unique_value  NUMBER,
  unique_value1 NUMBER,
  unique_group_id NUMBER,
  CONSTRAINT sample__v__v1__gid__u UNIQUE( unique_value, unique_value1, unique_group_id )
);

然后:

INSERT INTO sample
SELECT null, null, null FROM DUAL UNION ALL
SELECT null, null, null FROM DUAL UNION ALL
SELECT    3,    5,    7 FROM DUAL UNION ALL
SELECT    4,  123,    7 FROM DUAL;

将插入4行;但后来试着这样做:

INSERT INTO sample VALUES ( 3, 5, 7 );

会引发异常ORA-0001: unique constraint (TEST.sample__v__v1__gid__u) violated