2012-03-04 79 views
6

当我加入一些限制,例如:SQL冗余NOT NULL约束

create table Test(
    IDTest int primary key, 
    Credit int not null constraint Credit check (Credit >= 0) 
); 

在这种情况下是不是在Credit多余的,因为我加入一个约束Credit必须not null高于0 ?

+3

注意:某些(MySQL ...)SQL引擎会默默地忽略'CHECK'约束。 – biziclop 2012-03-04 12:08:55

回答

8

不,它不是多余的。

CHECK约束接受值,如果条件不FALSE,因此无论是TRUEUNKNOWN

如果您允许在列中为空,则NULL >= 0将评估为UNKNOWN并且将通过测试。

+0

谢谢,使所有的感觉:) – RSort 2012-03-04 12:31:50

+0

@RSort:考虑替代方案:如果它是一个条件必须为TRUE的要求,那么涉及可空列的每个约束将不得不明确地测试空值,这将是很多噪音和痛苦! – onedaywhen 2012-03-05 10:11:57