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)
);
我有下表。字段one, two, three
必须为正,字段four
必须小于每个字段的总和。
为什么我插入insert into A values (1, 2, 3, null);
时查询不会失败?
null < 1 + 2 + 3
没有意义,但仍然可以输入吗?
答案 0 :(得分:1)
NULL的行为不像您想象的那样。用“未知值”替换您头脑中的NULL。
“未知值是否小于1 + 2 + 3?”
就其本身而言,这种说法是荒谬的。从逻辑上讲,答案必须是“答案未知”。是的。
NULL < 1 + 2 + 3
不正确。不是错从字面上看是“未知价值”。它为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)
);