UNIQUE约束将多个列与条件组合在一起

时间:2016-04-15 00:15:34

标签: sql oracle oracle11g

我在Oracle 11g中有一个表,例如下面的列。

  • COL1_STATUS
  • COL2_ID
  • COL3_TYPE
  • COL4_DATE

我想创建一个组合所有4列的UNIQUE约束,但仅限于COL1_STATUS = 10

我该怎么做?表已经创建,因此我只查找ALTER命令。

此外,我搜索并发现类似的问题,建议使用唯一索引,但我想通过约束来实现这一点。

Conditional unique constraint with multiple fields in oracle db

提前致谢。

1 个答案:

答案 0 :(得分:4)

唯一索引和约束基本相同。使用唯一索引实现唯一约束。所以这真的应该做你想要的:

create unique index idx_table_4 on
    table(case when status = 10 then id end,
          case when status = 10 then type end,
          case when status = 10 then date end);

事实上,这就是documentation建议实施唯一约束的方式:

  

在一个或多个列上指定唯一约束时,Oracle   隐式地在唯一键上创建索引。如果你在定义   Oracle建议使用查询性能的唯一性   您改为使用CREATE显式创建唯一索引   UNIQUE INDEX声明。您还可以使用CREATE UNIQUE INDEX   声明创建一个唯一的基于函数的索引,定义一个   条件唯一约束。请参阅"使用基于函数的索引   定义条件唯一性:示例"了解更多信息。