我们先创建一个表:
create database itheima;
use itheima;
create table user(
id int primary key auto_increment comment '主键',
name varchar(10) not null unique comment '姓名',
age int check ( age > 0 && age <=120 ) comment '年龄',
status char(1) default '1' comment '状态',
gender char(1) comment '性别'
) comment '用户表';
auto_increment为MySQL的关键字表示自增
insert into user(name,age,status,gender) values ('Tom1',19,'1','男'),('Tom2',25,'0','男');
id字段是主键它是自增的我们不需要插入
insert into user(name,age,status,gender) values ('Tom3',19,'1','男');
此时我们再去插入一组数据就会显示如下图所示
紧接着我在name插入null值,那么会报错,违反了非空约束
然后我在之前的三条数据再次插入一个Tom3,那么也会报错,违反了unique
insert into user(name,age,status,gender) values ('Tom4',80,'1','男');
**这里可能会有疑问,为什么主键变成了5,前面的插入数据没有成功也向数据库申请了主键。
这时可能又有疑问了,为什么我申请两次失败,不应该主键为6吗?
name是null的时候没分空间就寄了,name是tom3的时候,在检查唯一时发现tom3已经有了,插入失败,但是id申请了。
insert into user(name,age,status,gender) values ('Tom5',-1,'1','男');
insert into user(name,age,status,gender) values ('Tom5',121,'1','男');
这两种都不行,不在范围里面
insert into user(name,age,gender) values ('Tom5',120,'男');
** status char(1) default ‘1’ comment ‘状态’,不写status,它会设置一个默认值,为‘1’**
check约束没通过后,查询优化器自动判定结果为null,因此不做任何操作,所以这里主键为6
可以进行这样插入更方便:
这样很方便的实现约束