我有这张桌子:
ID1 | ID2 |
1 2
我想要一个唯一的约束条件,禁止插入情侣(1,2)
以及情侣(2,1)
。
如果我定义:
ALTER TABLE mytable ADD CONSTRAINT unique_1 UNIQUE (ID1 ,ID2 );
我仍然可以插入这对情侣(2,1)
。
答案 0 :(得分:2)
这可以通过表达式完成,但不能在唯一的约束中使用,只能使用唯一的索引
create unique index unique_1
on mytable (least(id1, id2), greatest(id1, id2));
答案 1 :(得分:1)
除了@ 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);