MySQL之非空约束(NOT NULL)

非空约束(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)
  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值