关于检查约束空值
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)
);
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)
);