【问题标题】:UNIQUE constraint combining multiple columns with a condition将多个列与条件组合的唯一约束
【发布时间】:2016-08-06 18:45:09
【问题描述】:

我在 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

提前致谢。

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案1】:

    唯一索引和约束本质上是一回事。使用唯一索引实现唯一约束。所以这真的应该做你想做的事:

    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 显式创建唯一索引 唯一索引语句。您还可以使用 CREATE UNIQUE INDEX 语句来创建一个唯一的基于函数的索引,该索引定义了一个 条件唯一约束。请参阅“使用基于函数的索引 定义条件唯一性:示例”了解更多信息。

    【讨论】:

    • 美丽。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2019-11-02
    • 2012-05-17
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多