【发布时间】:2017-09-13 11:22:13
【问题描述】:
我有 3 列:A, B, C。
A 是 pkid,B 和 C 是 Varchars。我已经写了这样一个约束:
CONSTRAINT UNIQUE_DATA1 UNIQUE(B, C)。这可以防止插入值“x”和“y”两次,但如果“x”和“y”值已经存在,我也想防止插入“y”和“x”。
有没有办法把这个约束放进去?
【问题讨论】:
我有 3 列:A, B, C。
A 是 pkid,B 和 C 是 Varchars。我已经写了这样一个约束:
CONSTRAINT UNIQUE_DATA1 UNIQUE(B, C)。这可以防止插入值“x”和“y”两次,但如果“x”和“y”值已经存在,我也想防止插入“y”和“x”。
有没有办法把这个约束放进去?
【问题讨论】:
您可以创建基于函数的索引:
create unique index unique_data2 (least(b,c), greatest(b,c));
这只有在两个值都不能为空时才有效。如果可以,您可以执行以下操作:
create unique index unique_data2
( least(nvl(b,'~),nvl(c,'~'))
, greatest(nvl(b,'~),nvl(c,'~'))
);
其中 '~' 是一个字符串,你知道它永远不会是 b 或 c 的实际值。
【讨论】: