Navicat 博客

关系数据库系统中的 NULL 值及其用途 2020 年 3 月 3 日,由 Robert Gravelle 撰写

在数据库中,NULL值具有非常特殊的含义。因此,重要的是要理解NULL值不同于零值或包含空格的字段。在今天的博客中,我们将探讨NULL值的含义以及如何在 Navicat Premium 中使用NULL。

什么是NULL?

应该注意的是,NULL值不是数据库唯一的。在大多数计算机编程语言中也都可以找到它,它演变成值为零的内置常数。实际上,是字符0终止了C语言中的字符串。但是,随着时间的流逝,它的意思是“什么也没有”。具体来说,NULL是指向表示NULL的特殊位模式的指针。这就是通常所说的“null pointer”。

在数据库中,零是一个有意义的值,因此NULL变成一个特殊的标记,表示不存在任何值。从这种意义上讲,NULL不像在编程语言中那样指向存储位置。在数据库中,NULL值表示缺少值,这与零值不同。为了说明,请考虑以下问题:“Rob拥有多少CD?”答案可能是“零”(0)或NULL。在后一种情况下,NULL值可能意味着我们不知道Rob拥有多少CD。以后,一旦我们确定了Rob拥有的CD数量,就可以使用数字值更新该值。

允许将NULL作为列值

任何属于键值的列都不允许使用NULL,但是对于其他字段,则完全由您决定。在创建表时,在列定义旁边包含NOT NULL子句将强制用户在INSERT和UPDATE操作中为该列包含一个值。否则,将引发错误,并且操作将失败。Navicat Premium 的“表设计”界面包括“不为空”列,用于将字段指定为可为空或不可为空。这是Navicat 15的新深色模式:

Not_Null_column (64K)

在新字段上,将自动取消选中“不是 null”复选框。

在查询中引用NULL值

编写查询时,有时您会希望过滤出具有NULL值的行。其他时候,您会特别想检索包含NULL的行。 这是两种方法的结合:

查询可以使用IS NOT NULL子句过滤掉null。这是一个示例,该示例从Sakila数据库中排除了original_language_id列中值为NULL的电影:

Not_Null_query (75K)

同样,您可以通过从NOT NULL子句中删除NOT来找出哪些行包含NULL值。现在,仅返回那些original_language_id列为NULL值的行:

null_query (100K)

总结

在今天的博客中,我们探讨了NULL值的含义以及如何在关系数据库中使用此特殊值。

有兴趣了解有关Navicat Premium的更多信息吗?您完全可以免费试用14天,以进行评估!

Navicat 文章
频道条目
分享
文章归档