携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情
前言
上篇我们学习了MySQL中的约束。有兴趣的小伙伴可以阅读(# MySQL学习-约束)。
下面学习MySQL中的非空约束。
非空约束
关键字
NOT NULL
作用
限定某个字段/某列的值不允许为空。
SELECT employee_id, name, department_id
FROM employees;
| employee_id | name | department_id |
|---|---|---|
| 1 | xiaoming | 20 |
| 2 | xiaojuan | 30 |
| 3 | xiaohong |
从查询出的数据可以看出,xiaohong的部门一栏是空的,说明department_id是可以为空的,没有NOT NULL约束。一般主键都有NOT NULL约束,比如这里的employee_id。
特点
- 默认所有类型的值都可以是NULL,包括INT、FLOAT等数据类型。
- 非空约束只能出现在表对象的列上,只能某个列单独限定非空,不能组合非空。
- 一个表可以有很多列都分别限定了非空。
- 空字符串不等于NULL,0也不等于NULL。
增加非空约束
給字段增加非空约束,有两种方式,一种在创建表的时候,一种在创建表后。
创建表的时候
使用如下语句:
CREATE TABLE 表名(
字段名 数据类型,
字段名 数据类型 NOT NULL
);
举例一
创建emp表,其中id不为空,姓名不为空,性别可以为空。
CREATE TABLE emp(
id INT(5) NOT NULL,
name VARCHAR(30) NOT NULL,
sex CHAR NULL
);
现在插入三条数据
INSERT INTO emp
VALUES(1, 'xiaoming', '男');
INSERT INTO emp
VALUES(1, NULL, '男');
INSERT INTO emp
VALUES(1, 'xiaomei', NULL);
运行上面的三条插入语句,可以发现第一条和第三条语句成功插入数据。但第二条语句报错,没有成功插入数据。这是因为插入了NULL数据,但字段name时不为空的,所以插入数据失败。第三条语句中sex字段之所以能插入NULL成功,是因为此字段支持NULL,允许为空。
创建表后
使用如下语句:
ALTER TABLE 表名 MODIFY 字段名 数据类型 NOT NULL
举例二
修改上面创建的表emp中字段sex不为空。
ALTER TABLE emp MODIFY sex CHAR NOT NULL;
运行以上语句,现在再插入一条数据。
INSERT INTO emp
VALUES(1, 'xiaohong', NULL);
运行发现此时会报错,因为sex字段不为空。
删除非空约束
如果要删除非空约束,也使用创建表后修改字段的方式。
ALTER TABLE 表名 MODIFY 字段名 数据类型 NULL
#或
ALTER TABLE 表名 MODIFY 字段名 数据类型
- 第一条语句的方式,把NOT NULL替换成NULL,即该字段允许为空。
- 第二条语句的方式,把NOT NULL去掉,即是默认NULL,该字段允许为空。
举例三
修改上面创建的表emp中字段name为空。
ALTER TABLE emp MODIFY name VARCHAR(30) NULL;
运行后,字段name允许为空。
今天先学习到这里,明天继续。