SQL基础入门:第4课:特殊的NULL值(4)

把NULL值单独拿出来说,是因为在数据库中,NULL值是一个非常特殊的值。不注意的话,很容易犯错误。

在创建表时,对于表中的每个字段,可以指定字段是否必须包含值。对于不是必须包含值的字段,可以向字段中插入NULL值。

比如像下面这样,定义teacher_id和teacher_name这两个字段必须有值,而gender字段可以没有值。

CREATETABLEteacher

(

teacher_idVARCHAR(20)NOTNULL,

teacher_nameVARCHAR(50)NOTNULL,

genderVARCHAR(10)NULL,

primarykey( teacher_id )

);

每个字段,要么是NOT NULL,要么是可为NULL。如果不指定的话,默认的是可为NULL,也就是允许不包含值。

说了这么多,那么NULL值到底是什么呢?

其实,NULL值什么都不是!记住,是什么都不是,没有人知道NULL值是什么!

那为什么会在数据库中设计这样一个NULL值呢?是因为用它来表示一种”不知道“、”不确定“的状态。它既不等于0,也不等于空格’ ‘,更不等于空字符串”,甚至,它也不等于NULL。

想像一下,如果我们不知道张三的年龄,那么可以将张三的年龄赋值为NULL,而同样的,我们也不知道李四的年龄,那么也可以将李四的年龄赋值为NULL。这个时候如果问,张三的年龄与李四的年龄一样吗?那肯定是一个无法回答的问题。这样去理解NULL值与NULL值不相等,是不是容易多了。

那既然NULL值跟什么都不相等,我们如何去判断一个字段的值为NULL值呢?

可以使用如下语句来判断:

genderisnull; --判断gender字段为null值

genderisnotnull; --判断gender字段不为null值

使用gender =null;这样的判断方式是错误的!

其实,NULL值在数据库中的作用还是蛮大的。举个例子,一次期中考试过后,学校要对进步比较大的同学进行奖励。对于上学期期末考试总成绩在300分以下的同学,如果这次期中考试总成绩在500分以上,则发放200元奖学金;在400-500分之间,则发放100元奖学金;在400分以下,则发放0元奖学金,也就是不奖励。

画出表格如下:

那么上面这种描述,对上学期期末考试总成绩在300分以上的同学如何奖励并没有说明。此时,我们就可以为奖学金字段赋值为NULL,表示这个时候,我们还不知道学校如何对这部分学生进行奖励。

鉴于NULL值的特殊性,在使用NULL值时,我给出了下面两点忠告供大家参考:

允许NULL值的字段,不能作为主键字段;

尽量避免将字段设置为可为NULL,事实上,应该定下规范,所有字段都必须设置为NOT NULL;

(小提示:长按如下二维码添加老师微信)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181210G1BCZY00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励