當我加入一些限制,例如:SQL冗餘NOT NULL約束
create table Test(
IDTest int primary key,
Credit int not null constraint Credit check (Credit >= 0)
);
在這種情況下是不是在Credit
多餘的,因爲我加入一個約束Credit
必須not null
高於0 ?
當我加入一些限制,例如:SQL冗餘NOT NULL約束
create table Test(
IDTest int primary key,
Credit int not null constraint Credit check (Credit >= 0)
);
在這種情況下是不是在Credit
多餘的,因爲我加入一個約束Credit
必須not null
高於0 ?
不,它不是多餘的。
甲CHECK
約束接受值,如果條件不FALSE
,因此無論是TRUE
或UNKNOWN
。
如果您允許在列中爲空,則NULL >= 0
將評估爲UNKNOWN
並且將通過測試。
謝謝,使所有的感覺:) – RSort 2012-03-04 12:31:50
@RSort:考慮替代方案:如果它是一個條件必須爲TRUE的要求,那麼涉及可空列的每個約束將不得不明確地測試空值,這將是很多噪音和痛苦! – onedaywhen 2012-03-05 10:11:57
注意:某些(MySQL ...)SQL引擎會默默地忽略'CHECK'約束。 – biziclop 2012-03-04 12:08:55