
5.6 非空约束

非空性是指字段的值不能为空值(NULL),在MySQL数据库中,定义为主键的列,系统强制为非空约束。一张表中可以设置多个非空约束,它主要是用来规定某一列必须要输入值,有了非空约束,就可以避免表中出现空值了。
5.6.1 创建表时添加非空约束
非空约束通常都是在创建数据表时就创建了,创建非空约束的操作很简单,只需要在列后添加NOT NULL。对于设置了主键约束的列,就没有必要设置非空约束了,添加非空约束的语法格式如下:

【实例15】在test数据库中,定义数据表person_01,将名称和出生年月列设置为非空约束。输入如下SQL语句:

单击“执行”按钮,即可完成创建非空约束的操作,如图5-31所示。执行完成后,使用“DESC person_01;”语句即可看到该数据表的结构,在其中可以查看添加的非空约束,如图5-32所示。

图5-31 执行SQL语句

图5-32 查看添加的非空约束
5.6.2 修改表时添加非空约束
当创建好数据表后,也可以为其添加非空约束,具体的语法格式如下:
ALTER TABLE table_name MODIFY col_name datatype NOT NULL;
主要参数介绍如下。
- table_name:表名。
- col_name:列名,要为其添加非空约束的列名。
- datatype:列的数据类型,如果不修改数据类型,还要使用原来的数据类型。
- NOT NULL:非空约束的关键字。
【实例16】在现有person_01中,为remark字段添加非空约束。输入以下SQL语句:
ALTER TABLE person_01 MODIFY remark VARCHAR(200) NOT NULL;
单击“执行”按钮,即可完成添加非空约束的操作,如图5-33所示。执行完成后,使用“DESC person_01;”语句即可看到该数据表的结构,如图5-34所示,可以看到字段remark添加了非空约束。

图5-33 执行SQL语句

图5-34 查看添加的非空约束
5.6.3 删除表中的非空约束
非空约束的删除操作很简单,具体的语法格式如下:
ALTER TABLE table_name MODIFY col_name datatype;
【实例17】在现有person_01中,删除员工姓名name列的非空约束。在“查询编辑器”窗口中输入如下SQL语句:
ALTER TABLE person_01 MODIFY name VARCHAR(20);
单击“执行”按钮,即可完成删除非空约束的操作,如图5-35所示。
执行完成后,使用“DESC person_01;”语句即可看到该数据表的结构,在其中可以查看员工姓名name列的非空约束被删除,也就是说该列允许为空值,如图5-36所示。

图5-35 删除非空约束

图5-36 查看删除非空约束后的效果