我在Oracle 11g中有一个表,例如下面的列。
我想创建一个组合所有4列的UNIQUE约束,但仅限于COL1_STATUS = 10
我该怎么做?表已经创建,因此我只查找ALTER命令。
此外,我搜索并发现类似的问题,建议使用唯一索引,但我想通过约束来实现这一点。
Conditional unique constraint with multiple fields in oracle db
提前致谢。
答案 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 声明创建一个唯一的基于函数的索引,定义一个 条件唯一约束。请参阅"使用基于函数的索引 定义条件唯一性:示例"了解更多信息。