基于另一个列值的列约束

Constraint on Column Based on Another Column Value

我正在根据 Oracle 数据库中的某些条件编写关于列值的 sql 约束。我的 table 如下所示。(假设 id 是自动递增,'alpha' 和 'beta' 列也是数字)

   id    alpha    beta
--------------------------
   1      1        0
   2      1        1
   3      0        0
   4      0        0
   5      2        3
   6      4        1

如果两行的 alpha 值相同,则只能插入 beta 值为 1 的行。换句话说,我不应该插入 (1,1)[= 的行19=] 值,因为已经有一行的 beta 值为 1。(查看 id=2 的行)。除了 1 之外的任何值都可以自由插入。我需要对这种情况进行有用的控制。

您可以使用基于函数的索引:

create unique index xxx on t(a, case when b = 1 then -1 else id end)

Here 是一个 db<>fiddle.

您可以对基于条件的列使用唯一索引,如下所示:

create unique index u123
on your_table (alpha, case when beta = 1 then beta else id end)