如何在创建的表中强制执行约束?

问题描述:

我试图找出正确的约束语法如下声明:如何在创建的表中强制执行约束?

“对于一个给定的站点,或者都集水区和流域身高必须指定,或者两者都不指定(即它们都是NULL,或者它们都不是NULL) - 注意这是一个TABLE级约束。“

流域面积和流域高度是我在表中列。

我迄今已做的是

  1. 右键在左窗格中单击表名称,打开“编辑表”
  2. 点击“编辑”
  3. 点击在“约束”左窗格中
  4. 点击绿色加号>“新的检查约束”

这是什么一样打开“编辑表”箱C一个新的文本部分取而代之的是“检查条件”,我必须在Oracle SQL Developer可以理解的语法中指定约束条件。

此方法迄今为止与其他约束一起工作,但由于某种原因,我无法弄清楚如何对这个特定字词进行处理。

任何帮助将不胜感激,谢谢。

这一切都发生在Oracle SQL Developer中。

+2

类似'CHECK((CatchmentArea IS NULL和CatchmentHeight IS NULL)OR(CatchmentArea IS NOT NULL和CatchmentHeight IS NOT NULL))?? – ZLK

+2

MySQL不强制实施CHECK约束。我们需要在MySQL中强制执行这种约束,我们可以在BEFORE INSERT和BEFORE UPDATE触发器中执行检查。 – spencer7593

+0

与[this]类似(http://stackoverflow.com/questions/44060363/how-to-enforce-a-constraint-in-a-table-already-created)... – Aleksej

下面是实际的DDL

alter table your_table 
    add constraint your_table_catchment_ck check 
    ((Catchment_Area is not null and Catchment_Height is not null) 
     or (Catchment_Area is null and Catchment_Height is null) 
    ) 

对于你只需要使用条件(下文check位的IDE。当心所有的括号!

+0

当然,括号是不需要(技术上;他们可能需要人类更容易阅读)。 '(a和b)或(c和d)'与'a和b或c和d'相同。 – mathguy

+0

@mathguy - 在我看来,让人类更容易阅读代码的东西已经接近强制性要求,并没有什么区别。 – APC

+0

同意100% - 我只是澄清这一点(括号是强制性的,因为它们使代码更易于阅读,不是因为它们是正式要求的)。 – mathguy