oracle db中的条件唯一约束

时间:2012-04-25 14:26:43

标签: oracle constraints unique

我有一种情况需要根据另一个列值对列[attribute]强制执行唯一约束。

例如,我有一个像Table(ID,EID,Name,ISDeleted)的表

ISDeleted只能有一个值null或'y'(活动或删除),我想在EID上创建一个唯一约束,ISDeleted仅在ISDeleted = null时,因为我不关心是否有多个已删除的记录同样的身份。请注意,EID可以为空值。

我正在使用Oracle DB。

1 个答案:

答案 0 :(得分:24)

您无法创建约束。但是您可以创建一个独特的基于函数的索引。这利用了Oracle不对NULL值编制索引的事实 - isDeletedNOT NULL的任何行都不会包含在索引中,因此唯一约束将不适用于它们。

CREATE UNIQUE INDEX one_not_deleted
    ON table_name( (CASE WHEN isDeleted IS NULL
                         THEN eid
                         ELSE null
                      END) );