Oracle:2列的唯一约束

Oracle : unique constraint on 2 columns

我有这个 table :

   ID1 | ID2 |
     1     2

我想要一个唯一的约束,禁止插入一对 (1,2) 以及一对 (2,1)

如果我定义:

  ALTER TABLE mytable ADD CONSTRAINT unique_1 UNIQUE (ID1 ,ID2 );

我还能插入这对情侣(2,1)

这可以用表达式来完成,但不能用在唯一的约束中,只能用唯一的索引

create unique index unique_1 
   on mytable (least(id1, id2), greatest(id1, id2));

除了@a_horse_with_no_name的解决方案,您还可以通过虚拟列来实现:

create table t1 (col1 number,
                 col2 number,
                 col1_col2_least generated always as (least(col1, col2)),
                 col1_col2_greatest generated always as (greatest(col1, col2)));

--not strictly necessary
alter table t1 add constraint t1_u1 unique (col1, col2);

alter table t1 add constraint t1_u2 unique (col1_col2_least, col1_col2_greatest);

insert into t1 (col1, col2) values (1, 2);

insert into t1 (col1, col2) values (2, 1);

-- ORA-00001: unique constraint (SCHEMA.T1_U2) violated

insert into t1 (col1, col2) values (2, 2);