MySQL学习-非空约束

81 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第2天,点击查看活动详情

前言

上篇我们学习了MySQL中的约束。有兴趣的小伙伴可以阅读(# MySQL学习-约束)。
下面学习MySQL中的非空约束。

非空约束

关键字

NOT NULL

作用

限定某个字段/某列的值不允许为空。

SELECT employee_id, name, department_id
FROM employees;
employee_idnamedepartment_id
1xiaoming20
2xiaojuan30
3xiaohong

从查询出的数据可以看出,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允许为空。

今天先学习到这里,明天继续。