有没有办法使用oracle sql中的逻辑检查约束?
这是我的伪表:
create table child
(
name,
behaviour,
treat,
);
现在我想要的是如果behaviour
的孩子= 'bad'
然后treat != 'lollies'
。
答案 0 :(得分:3)
有时用NOT来表达不允许的内容更容易表达:
CHECK (NOT (behaviour = 'bad' AND treat = 'lollies'))
......意思是:
CHECK (behaviour != 'bad' OR treat != 'lollies')
很容易弄错,正如其他答案所显示的那样!
答案 1 :(得分:0)
试试这个
create table children (
childname VARCHAR2(50), behaviour VARCHAR2(50),treats VARCHAR2(50),
constraint behave_treat check (behaviour = 'bad' AND treats != 'lollies')
)
答案 2 :(得分:0)
ALTER TABLE child
ADD CONSTRAINT bad_behaviour_CK
CHECK (NOT (behaviour = 'bad' AND treat = 'lollies')) ;
中播放
答案 3 :(得分:0)
如果您之前已经学过命题逻辑,我们可以在这种情况下应用它,并说明获得最高投票答案的方式。
我们以 A 为behavior = 'bad'
的命题,而 B 为treat != 'lollies'
的命题。语句“如果为behavior = 'bad'
,则为treat != 'lollies'
”可以写为“ A → B ”。
请注意,“ A → B ”在逻辑上等同于“¬ A ∨ B ”(¬表示NOT,and表示OR)。因此,我们可以将语句“¬ A ∨ B ”转换回“ behavior != 'bad'
或'treat != 'lollies'
”。
就SQL而言,我们可以这样写:
CHECK (behaviour <> 'bad' OR treat <> 'lollies')
这等效于:
CHECK (NOT (behaviour = 'bad' AND treat = 'lollies'))