有没有一种方法可以基于表的列值之一添加表约束?

时间:2020-09-20 17:41:18

标签: ddl

更具体。我有此活动的桌子

create table event(
 id NUMERIC(3) PRIMARY KEY,
 date DATE
)

2 个答案:

答案 0 :(得分:2)

检查约束可以具有基于多个列的条件。在这里,如果canceled0,则要允许任何日期;如果不是,则要允许特定的日期范围:

ALTER TABLE event
ADD CONSTRAINT C_event_canceled CHECK(
    canceled = 0 OR
    date >= to_date('01/01/2021', 'dd/mm/yyyy')
);

答案 1 :(得分:2)

不允许取消1.01.2021之前的事件

Mureinik的答案是正确的。但是,此版本更接近您要表达的内容:

check (not (cancelled = 1 and date < date '2021-01-01') )

请注意,Oracle使用date作为日期常量的前缀。另外,date是一种数据类型-使其成为列名的非常不好的选择。我建议:

check (not (cancelled = 1 and event_date < date '2021-01-01') )