2012-06-07 89 views
1

在sql数据库列中,空字段将被设置为NULL,除非我们使用NOT NULL指定它。使用一个而不是另一个的优点是什么?谢谢!NULL与NOT NULL

+0

Ummmm很好的做法....你想确保列的值不为空?然后在该列上设置一个“非空”约束。如果你不在乎,那就不要。 – 2012-06-07 14:17:24

+0

如果你指定一个列为'NOT NULL',那么***不能为空。你的问题是自相矛盾的。 – MatBailie

+1

@Dems:空和NULL是不同的东西;许多rdbms可以将一个NOT NULL字段设置为空字符串0等,所以这不完全准确。 –

回答

9

如果您需要在列中表示未知数据,则可以为空。如果你将永远在列数据,这是更好地使之不为空,因为

  1. 与空处理,可恼人的和违反直觉
  2. 它可以节省一点空间
  3. 在某些数据库系统,空值不被编入索引。
+0

这可能与OP有关的进一步阅读:http://www.bennadel.com/blog/85-Why-NULL-Values-Should-Not-Be-Used-in-a-Database-Unless-Required.htm – kush

+0

节省空间?我不确定这是否有效。参见[上一个问题](http://stackoverflow.com/questions/556363/space-used-by-nulls-in-database)和[SQL Server示例](http://sqlfiddle.com/#! 3/3c962/3)。不过,我完全同意你的第一点。 – GarethD

+0

@GarethD,SQL Server中的NULL表使用一种称为NULL位图的表......每8个可为空的列每行一个字节。没有太多空间,但有一些。它将叠加在非常大的桌子上;但它通常不被认为是一个重要的数额。 –

2

当一个字段设置为NOT NULL时,它不能为空。这意味着您在插入记录时必须为该字段指定一个值。

+0

“NOT NULL”列可以包含“空”值。 –

+0

@Ash:'CHAR'或'VARCHAR'的NOT NULL列是的,它们可以包含空字符串 - 这是一个值。但不是“空值”(不管这意味着什么)。 'INT NOT NULL'不能以任何方式清空(除非你的意思是它的值为'0') –

+0

'NULL'例子:对于'INT'我们有'0';对于'CHAR'或'VARCHAR'我们有'''',什么是空字符串,但仍然是一个值。 @ypercubeᵀᴹ,是吗? –

1

只是为了阐明你的观点Ö在符合SQL ANSI标准的任何数据库中,没有将空字符串设置为NULL。 NULL与空字符串不同。给定明确的NULL值或无值的列被分配NULL。

这里有一些不使用NULL的优点。您可以节省用于区分NULL值的位的空间。您还可以使报表的含义更明确,例如“字段<>值”。另外,有些数据库在优化诸如“coalesce(field,'')<> value”以使用索引等语句时遇到问题。

有时,需要NULL,特别是当您插入不完整的记录时。而且,因为默认列允许NULL,所以懒惰确保几乎所有数据库中的所有列都接受NULL值。

0

NOT NULL义务为该字段指定特定值。

使用NULL当您需要为该字段保留空值时。

使用NOT NULL当你想禁止该字段的空值。大多数数据库缓慢运行的额外目标是NULL-值。所以如果你怀疑使用NOT NULL

0

NOT NULL是一个约束,它确保每列的列中都有一个值。这是当正确应用,因为你必须在做业务的时候要小心,在表空值一样加入,因为没有空等于任何其他空

http://en.wikipedia.org/wiki/Null_(SQL