什么是数据库NULL字段?

时间:2010-01-29 23:15:36

标签: database-design

有人能解释数据库表中NULL的用法吗?它用于什么以及它如何有用?

8 个答案:

答案 0 :(得分:11)

标记“未知”或缺少值非常有用。

例如,如果您要存储人员,并且其中一个字段是他们的生日,则可以允许NULL表示“我们不知道他何时出生”。

这与具有非可空字段形成对比,对于相同类型的含义,您需要指定具有相同含义的“魔术值”。

例如,您应该在该生日区域存储的日期是指“我们不知道他何时出生”? 1970-01-01应该是那个神奇的价值吗?如果我们突然需要存储那天出生的人会怎么样?

现在,已经说过,NULL是数据库设计和引擎中难以处理的问题之一,因为它是值的传播属性。

例如,以下结果如下:

SELECT *
FROM people
WHERE birthday > #2000-01-01#

SELECT *
FROM people
WHERE NOT (birthday > #2000-01-01#)

(注意,上述日期语法在任何数据库引擎中都可能不合法,不要挂断它)

如果你有很多人生日“未知”,即。 NULL,它们不会出现在任何一个结果中。

因为在上面的两个查询中,第一个查询“所有人都有标准X”,第二个是“所有人没有标准X”,你会认为这两个查询的结果一起会产生所有数据库中的人。

然而,查询实际上说“所有具有已知和明确标准X的人。”

这类似于问某人“我是不是40岁?”另一个人说“我不知道”。如果你继续问“我是不是41岁?”,答案是一样的,他仍然不知道。

此外,任何数学或比较也会产生NULL

例如,是什么:

SELECT 10 + NULL AS X

结果为NULL,因为“10 + unknown”仍然未知。

答案 1 :(得分:6)

来自Wikipedia

  

由创作者介绍   关系数据库模型,E。F. Codd,   SQL Null用于实现   要求所有真正的关系   数据库管理系统(RDBMS)   支持“失踪”的表示   信息和不适用   信息“

答案 2 :(得分:1)

这就像一个充满“我不知道”或“无所谓”的专栏。例如,在客户表中,如果他们没有填写他们的电话号码,您在电话号码字段中放了什么?

答案 3 :(得分:0)

代表缺乏任何价值。

NULL可用于在表中存储可选数据。假设你有一张Car table。并非所有汽车都有中继线...所以他们的TrunkSpace列可能是NULL

答案 4 :(得分:0)

我喜欢JRL /维基百科的回答。当您不希望将列默认为实际值时,有时需要使用NULL填充列。我的意思是,当你使用varchar时,有时可以使用空字符串而不是NULL。但是有点或日期类型呢?如果使用位列,则将其默认为0或1可能不够。那个日期类型的默认日期应该是什么?

在某些系统中使用NULLS还有一个原因。 SQL Server 2008引入了sparse columns的概念,它为NULL值优化了存储。当你的列很可能是空的时候(或者说大多数是NULL),最好使用它们。

答案 5 :(得分:0)

“它用于什么以及它如何有用?”

它用于“解决”(请注意引号)处理缺少信息的问题。

它可用于创建软件设计问题和软件实现问题(其中最明显的一个可以概括为'(x == y)==!(x == y)'),或者换句话说:它对于为声称空值不可避免的程序员的糟糕负载创建作业安全性很有用。

答案 6 :(得分:0)

请检查this question

“Null”基本上意味着“没有价值”,但也可以意味着“哪个价值未知”,从而使其解释有时含糊不清。考虑一个人员表,包括出生日期和驾驶执照n#字段。如果出生日期字段没有价值,则显然意味着日期未知(每个人都是这些天出生的......)。现在,如果驾驶执照领域没有任何价值,是否意味着该人没有驾驶执照,或者是否意味着其n#未知?

答案 7 :(得分:0)

它只是在插入特定记录的数据库时表示“缺失值”或“未知值”。