2012-03-04 22 views
6

Khi tôi thêm một số hạn chế, ví dụ:SQL Redundant NOT NULL Hạn chế

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

Trong trường hợp này không phải là not null trong Credit dư thừa như tôi thêm một hạn chế mà Credit phải cao hơn 0 ?

+3

Lưu ý: một số (MySQL ...) Các công cụ SQL âm thầm bỏ qua ràng buộc 'CHECK'. – biziclop

Trả lời

8

Không, không cần thiết.

Hạn chế CHECK chấp nhận giá trị nếu điều kiện không phải là, vì vậy cho dù đó là TRUE hoặc UNKNOWN.

Nếu bạn cho phép Null trong cột của mình, thì NULL >= 0 sẽ đánh giá là UNKNOWN và sẽ vượt qua bài kiểm tra.

+0

Cảm ơn bạn, làm cho tất cả các ý nghĩa :) – RSort

+0

@RSort: Hãy xem xét thay thế: nếu nó là một yêu cầu rằng điều kiện phải là TRUE thì mọi ràng buộc liên quan đến cột nullable sẽ phải kiểm tra một cách rõ ràng cho nulls và đó sẽ là rất nhiều tiếng ồn và đau đớn! – onedaywhen