【问题标题】:Conditional unique constraint in oracle dboracle db中的条件唯一约束
【发布时间】:2012-05-06 06:17:35
【问题描述】:

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

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

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

我为此使用 Oracle DB。

【问题讨论】:

    标签: oracle constraints unique


    【解决方案1】:

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

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

    【讨论】:

    • 'else null' 会做什么?它会插入空值还是允许插入重复记录?
    • @SantoshPingale - 由于 Oracle 索引不索引 NULL 值,ELSE NULL 将从允许重复的索引中排除那些行。
    猜你喜欢
    • 2012-07-21
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2013-04-20
    • 2021-07-22
    • 2017-07-07
    相关资源
    最近更新 更多