把NULL值单独拿出来说,是因为在数据库中,NULL值是一个非常特殊的值。不注意的话,很容易犯错误。
在创建表时,对于表中的每个字段,可以指定字段是否必须包含值。对于不是必须包含值的字段,可以向字段中插入NULL值。
比如像下面这样,定义teacher_id和teacher_name这两个字段必须有值,而gender字段可以没有值。
CREATE TABLE teacher
(
teacher_id VARCHAR(20) NOT NULL,
teacher_name VARCHAR(50) NOT NULL,
gender VARCHAR(10) NULL,
primary key ( teacher_id )
);
每个字段,要么是NOT NULL,要么是可为NULL。如果不指定的话,默认的是可为NULL,也就是允许不包含值。
说了这么多,那么NULL值到底是什么呢?
其实,NULL值什么都不是!记住,是什么都不是,没有人知道NULL值是什么!
那为什么会在数据库中设计这样一个NULL值呢?是因为用它来表示一种”不知道“、”不确定“的状态。它既不等于0,也不等于空格’ ‘,更不等于空字符串”,甚至,它也不等于NULL。
想像一下,如果我们不知道张三的年龄,那么可以将张三的年龄赋值为NULL,而同样的,我们也不知道李四的年龄,那么也可以将李四的年龄赋值为NULL。这个时候如果问,张三的年龄与李四的年龄一样吗?那肯定是一个无法回答的问题。这样去理解NULL值与NULL值不相等,是不是容易多了。
那既然NULL值跟什么都不相等,我们如何去判断一个字段的值为NULL值呢?
可以使用如下语句来判断:
gender is null; --判断gender字段为null值
gender is not null; --判断gender字段不为null值
使用gender = null;这样的判断方式是错误的!
其实,NULL值在数据库中的作用还是蛮大的。举个例子,一次期中考试过后,学校要对进步比较大的同学进行奖励。对于上学期期末考试总成绩在300分以下的同学,如果这次期中考试总成绩在500分以上,则发放200元奖学金;在400-500分之间,则发放100元奖学金;在400分以下,则发放0元奖学金,也就是不奖励。
画出表格如下:
那么上面这种描述,对上学期期末考试总成绩在300分以上的同学如何奖励并没有说明。此时,我们就可以为奖学金字段赋值为NULL,表示这个时候,我们还不知道学校如何对这部分学生进行奖励。
鉴于NULL值的特殊性,在使用NULL值时,我给出了下面两点忠告供大家参考:
允许NULL值的字段,不能作为主键字段;
尽量避免将字段设置为可为NULL,事实上,应该定下规范,所有字段都必须设置为NOT NULL;
Mac老师个人微信号:201855204
联系客服