当另一列具有特定值时,列上的NOT NULL约束

sat*_*sat 3 postgresql check-constraints

create table test (
    col1 varchar(20),
    col2 varchar(20)
)
Run Code Online (Sandbox Code Playgroud)
  1. 当col1的值为'1'时,col2不能为空.
  2. 当col1具有任何其他值时,col2可以为null.

有没有办法根据特定列的值编写检查约束?

Eev*_*vee 6

你可以写一个表级约束,当然.

CREATE TABLE test (
    col1 VARCHAR(20),
    col2 VARCHAR(20),
    CHECK (col1 != '1' OR col2 IS NOT NULL)
);
Run Code Online (Sandbox Code Playgroud)

要么col1不是'1'(和col2可以是任何东西),要么col1'1'(并且col2不能为空).

请参阅手册中第三个示例.