[英]NULL NOT NULL on Default constraint in sql
如果我在Sql中設置一個帶有Default
約束的記錄,例如
[Publicbit] BIT DEFAULT ((0)),
我需要設置NULL/NOTNULL
約束嗎?
編輯:我使用布爾值,但請擴展您對其他數據類型的答案。
您永遠不需要 Null約束,但默認值不會保護您的表免受顯式NULL的影響。 因此,如果要強制執行此條件,則應使用NOT NULL約束。
use tempdb
go
CREATE TABLE example
(
id BIT DEFAULT (0)
)
INSERT example (id) VALUES (null)
SELECT * FROM example
不,他們是可選的。
column_name ... [ NULL | NOT NULL ]
當您的選項為0/1
時,您不應期望NULL
。
您應該指定NOT NULL,以防止NULL進入此記錄。 這聽起來像你想要的唯一有效值是0和1.如果某人(或將來你)寫了一個傳入此列的NULL的記錄(或代碼),那么除非你指定NOT NULL,否則它將被允許。
通過指定DEFAULT,如果SQL INSERT語句不包含該列,則僅保護NULL值。
具有DEFAULT值的列可以是必需的(NOT NULL),也可以允許空值(NULL)。 在我看來,從查詢編寫的角度來看,最好有強制列,因為允許空值的列可能會導致不必要的復雜性 :
示例#1 :在某些情況下,如果要顯示可以寫入的所有非活動行
WHERE Publicbit = 0
但如果此列允許空值,那么您可以使用
WHERE Publicbit = 0 OR Publicbit IS NULL
示例#2 :如果要顯示MyColum1
和MyColum2
具有不同值的那些行,那么您可以使用
WHERE MyColumn1 <> MyColumn2
但如果這些列允許空值,那么你必須重寫
WHERE MyColumn1 <> MyColumn2
OR MyColumn1 IS NULL AND MyColumn2 IS NOT NULL
OR MyColumn1 IS NOT NULL AND MyColumn2 IS NULL
要么
WHERE MyColumn1 <> MyColumn2
OR EXISTS
(
SELECT MyColumn1
EXCEPT
SELECT MyColumn2
)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.