如题   如何防止某个字段在 一定条件 下 不重复,用触发器实现. (或者提供一种思路) 注意 不允许重复是在某种条件下.而非所有情况下不允许重复.  比如 表 test ,字段 a ,b ,当b为某种条件时 a不允许重复.

解决方案 »

  1.   

    补充一点. 不能用insert触发,只能用update触发,因为这个字段开始都是insert 空值进去,后来才做update的.发现有重复的.但不允许他有重复(在某种条件下),但找不到为什么会重复,因此想用update触发器来抛一错.
      

  2.   

    比如   表   test   ,字段   a   ,b   ,当b为某种条件时   a不允许重复.
    -------------------------------------
    if not exists (select 1 from tb where b = 为某种条件 and a = 某个固定的值)
       insert into tb ....
      

  3.   

    and   a   =   某个固定的值 ??没有固定的值,就是为了防止在update的时候产生重复值
      

  4.   

    用唯一索引, 根据某条件设置为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