我的问题是关于检查约束,正常的语法是:
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
。如何以检查我上面提到的条件的方式解决这个约束?