私の質問は、制約のチェックに関するものです。通常の構文は次のとおりです。
ALTER TABLE barracks
ADD CONSTRAINT chk_barracks CHECK( status IN('Destroyed', 'constructed'))
これは、列のステータスを破棄または構築する必要があることを意味します。
以下では、兵舎が null 値を受け入れないことを指定しています
ALTER TABLE barracks
ADD CONSTRAINT chk_barracks CHECK(status IN('Destroyed', 'constructed')
AND status IS NOT NULL)
今、列を追加しましcolourた。が構築されているかどうか を指定したい場合は、REDのみで、列STATUSはNOT NULLにする必要がありますbarrackscolour
兵舎が破壊された場合
次にBLACKで、列STATUSはNULLcolourである必要があります。
だからここに私が書いたチェック制約があります:
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。上記の条件をチェックする方法でこの制約を解決するにはどうすればよいですか?