2012-03-04 64 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