表数据 COL1 COL2
A
A
B 1
B 1 两个字段的唯一约束 ,一个字段非空 ,一个字段可以为空 ,想实现仅对非空数据进行唯一性约束 ,允许上面例子 A的情况存在,不允许 B的情况存在,目前已经有存在B数据的情况,忽略原有的重复数据,以后不允许出现 麻烦各位大牛
A
A
B 1
B 1 两个字段的唯一约束 ,一个字段非空 ,一个字段可以为空 ,想实现仅对非空数据进行唯一性约束 ,允许上面例子 A的情况存在,不允许 B的情况存在,目前已经有存在B数据的情况,忽略原有的重复数据,以后不允许出现 麻烦各位大牛
-- 给你写个例子SQL>
SQL> create table test(a varchar(10) not null, b varchar(10));
Table created
SQL> begin
2 insert into test values('A',NULL);
3 insert into test values('A',NULL);
4 insert into test values('B','1');
5 insert into test values('B','1');
6 end;
7 /
PL/SQL procedure successfully completed
SQL> alter table test
2 add constraint uk_test unique (a,b) deferrable disable novalidate;
Table altered
SQL> alter table test enable novalidate constraint uk_test;
Table altered
SQL> insert into test values('A',NULL) ;
insert into test values('A',NULL)
ORA-00001: 违反唯一约束条件 (ITSM_USER.UK_TEST)
SQL> commit ;
Commit complete
SQL> insert into test values('C',NULL) ;
1 row inserted
SQL> commit ;
Commit complete
SQL> insert into test values('C',NULL) ;
insert into test values('C',NULL)
ORA-00001: 违反唯一约束条件 (ITSM_USER.UK_TEST)
SQL> commit ;
Commit complete
SQL> select * from test ;
A B
---------- ----------
A
A
B 1
B 1
C
SQL> drop table test purge;
Table droppedSQL>