比如 表 test ,字段 a ,b ,当b为某种条件时 a不允许重复. ------------------------------------- if not exists (select 1 from tb where b = 为某种条件 and a = 某个固定的值) insert into tb ....
and a = 某个固定的值 ??没有固定的值,就是为了防止在update的时候产生重复值
用唯一索引, 根据某条件设置为null(null在索引中不存储)SQL> create table t(a int, b int);表已创建。SQL> create unique index idx_t_test on t(case when b=5 then null else a end, case when b=5 then null else b end);索引已创建。SQL> insert into t(a, b) values(1,1);已创建 1 行。SQL> insert into t(a, b) values(1,1); insert into t(a, b) values(1,1) * ERROR 位于第 1 行: ORA-00001: 违反唯一约束条件 (SYS.IDX_T_TEST) SQL> insert into t(a, b) values(1,5);已创建 1 行。SQL> insert into t(a, b) values(1,5);已创建 1 行。SQL> insert into t(a, b) values(1,5);已创建 1 行。SQL> select * from t; A B ---------- ---------- 1 1 1 5 1 5 1 5
-------------------------------------
if not exists (select 1 from tb where b = 为某种条件 and a = 某个固定的值)
insert into tb ....
insert into t(a, b) values(1,1)
*
ERROR 位于第 1 行:
ORA-00001: 违反唯一约束条件 (SYS.IDX_T_TEST)
SQL> insert into t(a, b) values(1,5);已创建 1 行。SQL> insert into t(a, b) values(1,5);已创建 1 行。SQL> insert into t(a, b) values(1,5);已创建 1 行。SQL> select * from t; A B
---------- ----------
1 1
1 5
1 5
1 5