MySQL数据库学习——约束——概述+演示

MySQL数据库学习——约束——概述+演示_第1张图片
MySQL数据库学习——约束——概述+演示_第2张图片
我们先创建一个表:

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
可以进行这样插入更方便:
MySQL数据库学习——约束——概述+演示_第3张图片
这样很方便的实现约束
MySQL数据库学习——约束——概述+演示_第4张图片

你可能感兴趣的:(MySQL学习,数据库,mysql,学习)