MySQL-约束

在这里插入图片描述
在这里插入图片描述
我们先创建一个表:

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
可以进行这样插入更方便:
在这里插入图片描述
这样很方便的实现约束
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值