非空约束(Not Null Constraint)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。
- 在创建表时设置非空约束
<字段名> <数据类型> NOT NULL;
因为我的测试表名都是用的同一个,大家不要忘了把原来创建的表删掉。嘿嘿
mysql> CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL ,
gender VARCHAR(10) DEFAULT '女'
);
Query OK, 0 rows affected (0.29 sec)
mysql> insert into student(id,name,gender) values(1,'NULL','女');
Query OK, 1 row affected (0.04 sec)
mysql> SELECT * FROM STUDENT;
+----+------+--------+
| id | name | gender |
+----+------+--------+
| 1 | NULL | 女 |
+----+------+--------+
1 row in set (0.07 sec)
mysql> insert into student(id,name,gender) values(2,NUll,'女');
1048 - Column 'name' cannot be null
这里需要注意的是insert into student(id,name,gender) values(1,'NULL','女');
和insert into student(id,name,gender) values(2,NUll,'女');
第一个可以成功插入表中,是因为’'是字符串,并不是真的空值。
- 在修改表中添加非空约束
ALTER TABLE <数据表名> CHANGE COLUMN <字段名> <字段名> <数据类型> NOT NULL;
这里可以看出性别刚开始是可以设置为空的,加入语句后则不可以设置为空。
mysql> ALTER TABLE student CHANGE COLUMN gender gender VARCHAR(10) NOT NULL;
Query OK, 0 rows affected (0.44 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> insert into student(id,name,gender) values(2,'tom',NULL);
1048 - Column 'gender' cannot be null
这里要注意的是,你添加非空约束的这一列的值不能已经存在空值,如下面,我现在gender里面加入了空值,在设置非空约束就会报错,大家注意这一点,希望有所帮助。
mysql> DROP TABLE student;
Query OK, 0 rows affected (0.15 sec)
mysql> CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(50) ,
gender VARCHAR(10) DEFAULT '女'
);
Query OK, 0 rows affected (0.26 sec)
mysql> insert into student(id,name,gender) values(2,'tom',NULL);
Query OK, 1 row affected (0.07 sec)
mysql> ALTER TABLE student CHANGE COLUMN gender gender VARCHAR(10) NOT NULL;
1138 - Invalid use of NULL value
- 删除非空约束
ALTER TABLE <数据表名> CHANGE COLUMN <字段名> <字段名> <数据类型> NULL;
mysql> CREATE TABLE student(
id INT PRIMARY KEY,
name VARCHAR(50) ,
gender VARCHAR(10) DEFAULT '女'
);
Query OK, 0 rows affected (0.27 sec)
mysql> ALTER TABLE student CHANGE COLUMN gender gender VARCHAR(10) NOT NULL;
Query OK, 0 rows affected (0.37 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC STUDENT;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(50) | YES | | NULL | |
| gender | varchar(10) | NO | | NULL | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.05 sec)
mysql> ALTER TABLE student CHANGE COLUMN gender gender VARCHAR(10) NULL;
Query OK, 0 rows affected (0.38 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> DESC STUDENT;
+--------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id | int(11) | NO | PRI | NULL | |
| name | varchar(50) | YES | | NULL | |
| gender | varchar(10) | YES | | NULL | |
+--------+-------------+------+-----+---------+-------+
3 rows in set (0.05 sec)