2010-01-06 112 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表进行内部连接,行将消失。

其次 - 如上面所提到的表中增加一个新列以上时,你需要给它一个默认值,如果列不可为空。