关于检查约束空值

Regarding check constraint null values

CREATE TABLE A (
   one INT CHECK (one > 0),
   two INT CHECK (two > 0),
   three INT CHECK (three > 0),
   four INT CONSTRAINT ok CHECK (
   four < one + two + three),
   PRIMARY KEY (one, two)
);

我上面有下面的table。字段 one, two, three 必须为正数,字段 four 必须小于每个字段的总和。

为什么我插入insert into A values (1, 2, 3, null);,查询没有失败?

null < 1 + 2 + 3没意义,但还是让我输入?

NULL 并不像您想象的那样。用 "unknown value".

替换你心中的 NULL

"Is an unknown value less than 1 + 2 + 3?"

就其本身而言,该声明是荒谬的。从逻辑上讲,答案必须是 "The answer is unknown." 确实如此。

NULL < 1 + 2 + 3 不正确。这不是假的。从字面上看 "unknown value." 是 NULL。 NULL 上的 CHECK 语句失败,因为它们只在已知的错误值上失败。如果您不希望 NULL 破坏聚会,请确保永远不会输入 NULL。

CREATE TABLE A (
   one INT NOT NULL CHECK (one > 0),
   two INT NOT NULL CHECK (two > 0),
   three INT NOT NULL CHECK (three > 0),
   four INT NOT NULL CONSTRAINT ok CHECK (four < one + two + three),
   PRIMARY KEY (one, two)
);