我的问题是关于检查约束,正常的语法是:
ALTER TABLE barracks
ADD CONSTRAINT chk_barracks CHECK( status IN('Destroyed', 'constructed'))
这意味着列状态应该被破坏或构造。
在下面我指定营房不接受空值
ALTER TABLE barracks
ADD CONSTRAINT chk_barracks CHECK(status IN('Destroyed', 'constructed')
AND status IS NOT NULL)
现在我添加了列colour。我想指定如果 barracks是构造的,那么colour应该只是RED并且列STATUS应该是NOT NULL
如果军营被摧毁
然后colour应该是BLACK并且列STATUS应该是NULL。
所以这是我写的检查约束:
ALTER TABLE barracks
ADD CONSTRAINT chk_barracks CHECK( ((status IN ('Destroyed', 'constructed')
AND status IS NOT NULL)
AND (color IN('RED') ))
OR (( status IN('Destroyed', 'constructed')
AND status IS NULL)
AND (color IN('BLACK') )))
如果颜色为红色,我仍然可以插入NULL到列中的问题status。如何以检查我上面提到的条件的方式解决这个约束?