2010-01-06 70 views

回答

0

如果你不允許在一個領域(特別是新添加到現有的表),空值是增加一個默認值是個好主意。如果不這樣做,那麼不包含新字段的現有INSERT代碼將失敗,因爲該字段的值將被視爲空。它在時間戳等領域也很有用,所以您不必在每個插入點上編寫值。

-don

+0

如果我使用LINQ to SQL怎麼辦?不linq已經默認支持默認值? – forme 2010-01-06 03:52:39

+0

我不知道。我從來沒有用過linq,對不起。 – 2010-01-06 19:39:21

1

只有當字段被標記爲不可爲空時纔有必要。好處是對於新行,您不必爲每個字段明確輸入值。在將新字段添加到現有模式時,這可能特別有用 - 您可以避免必須返回並更新所有代碼。

編輯 - 對不起,這裏就是我想的。添加非空表的字段時需要。 MySQL將爲所有標記爲不可爲空的字段分配一個默認值;不確定關於SQL Server。

+1

錯誤。只需在每個INSERT中指定一個非空值,並且不需要缺省值。方便,但不是必需的。 – 2010-01-06 03:44:54

+0

Re:編輯:對。 – 2010-01-06 03:54:43

0

主要用途是強制你的領域模型,即如果一個列應該是零而不是空,並且如果該列被標記爲不可空,那麼它將需要一個默認值(最好)或者在應用程序層。

一個好處是,它可以簡化您的代碼(即不用擔心處理空值)

位字段應該總是是非空的,並有一個默認的。

0

這沒有必要。

  1. 如果您將列添加到包含現有數據的表中,則新列將被初始化。例如:你沒有收集一些數據項目,然後你開始這樣做。對於先前存在的記錄,您需要「不適用」或零或其他內容。

  2. 如果你想爲一列相同的值當插入行有一個默認的,你沒有拼出來的SQL。例如:所有SO用戶的聲望爲零。

1

默認約束意味着如果在INSERT或UPDATE語句中未提供值或NULL,則將使用DEFAULT約束值。

是否有必要讓他們定義的?這完全取決於涉及的專欄的業務規則。

0

有用的原因有兩個,如果你希望90%的條目具有相同的價值例如您可以將LANGUAGE列設爲「EN」,並保存90%的用戶輸入兩個字符。這是特別推薦的地方,如果LANGUAGE是空白的,則存在foriegn鍵關係,那麼當強制引用完整性時插入會失敗 - 或者如果對LANGUAGES表進行內部連接,行將消失。

其次 - 如上面所提到的表中增加一個新列以上時,你需要給它一個默認值,如果列不可爲空。