了解使用NULL来避免数据库问题
新的数据库世界的用户常常被特定的字段值 - NULL值所困惑。 该值可以在包含任何类型数据的字段中找到,并且在关系数据库的上下文中具有非常特殊的含义。 最好用几个关于NULL 不是什么的话来开始我们对NULL的讨论:
- NULL不是数字零。
- NULL不是空字符串(“”)的值。
相反,NULL是用来表示未知数据的值。 通常,数据库程序员会使用短语“一个NULL值”,但这是不正确的。 请记住:NULL是未知的值,其中该字段显示为空白。
真实世界中的NULL
我们来看一个简单的例子:一个包含水果摊的库存的表。 假设我们的库存包含10个苹果和3个桔子。 我们也储存李子,但我们的库存信息不完整,我们不知道有多少(如果有)李子库存。 使用NULL值,我们可以在下表中显示库存表。
水果摊位清单
InventoryID | 项目 | 数量 |
1 | 苹果 | 10 |
2 | 桔子 | 3 |
3 | 李子 | 空值 |
将李子记录的数量设为0显然是不正确的,因为这意味着我们在库存中没有李子。 相反,我们可能会有一些李子,但我们不确定。
为NULL或NOT NULL?
表可以设计为允许或不允许NULL值。
以下是创建允许一些NULL的Inventory表的SQL示例:
SQL> CREATE TABLE INVENTORY(InventoryID INT NOT NULL,Item VARCHAR(20)NOT NULL,Quantity INT);此处的Inventory表不允许InventoryID和Item列的NULL值,但确实允许它们用于Quantity列。
虽然允许NULL值非常好,但NULL值可能会导致问题,因为任何一个值为NULL的值的比较总是会导致NULL。
要检查您的表是否包含NULL值,请使用IS NULL或IS NOT NULL运算符。 这是一个IS NULL的例子:
SQL> SELECT INVENTORYID,ITEM,QUANTITY FROM INVENTORY WHER QUANTITY NOT NOT NULL;以我们的例子为例,这将返回:
InventoryID | 项目 | 数量 |
---|---|---|
3 | 李子 |
在NULL上运行
使用NULL值通常会生成NULL结果,具体取决于SQL操作 。 例如,假设A是NULL:
算术运算符
- A + B = NULL
- A - B = NULL
- A * B = NULL
- A / B = NULL
比较运算符
- A = B = NULL
- A!= B = NULL
- A> B = NULL
- A!
这些只是运算符的一些示例,如果一个操作数为NULL,它将始终返回NULL。 存在更复杂的查询,并且所有查询都由NULL值复杂化。 回家的要点是,如果你在数据库中允许NULL值,理解它们的含义和计划。
简而言之,这是NULL !