0
点赞
收藏
分享

微信扫一扫

第20讲:表中字段约束的概念以及基本使用

表中字段约束的概念以及基本使用

文章目录

1.约束的概念

所谓约束指的肯定就是某些限制,在数据库中,约束的是作用表中字段上的一个限制规则,用于限制存在在表中的数据,写入数据时必须满足表中字段的约束策略,否则将无法写入成功。

约束的目的是为了保证数据库中的数据的正确性、完整性、有效性、一致性等等。

约束有以下几种类型:

约束的类型含义关键字
非空约束限制字段的数据不能为NULLNOT NULL
唯一约束保证该字段下的所有数据都是唯一的并且都不重复UNIQUE
主键约束主键是一行数据的唯一标识,要求非空,并且在整张表都是唯一的PRIMARY KEY
默认约束写入数据时,如果未指定该字段的值,则采用默认值DEFAULT
检查约束保证字段值满足一个条件(MySQL 8.0.16版本之后才有的功能)CHECK
外键约束用来让两张表的数据之间建立连接,保证数据的一致性和完整性FOREIGN KEY

约束是作用于表中的字段的,是在创建表、修改表的时候添加约束。

2.使用约束的命令格式

1)主键约束

字段 数据类型 PRIMARY KEY

2)唯一约束

字段 数据类型 UNIQUE

3)非空约束

字段 数据类型 NOT NULL

4)默认约束

字段 数据类型 DEFAULT '默认值'

5)检查约束

字段 数据类型 CHECK ( 条件1 && 条件2 )

3.创建一张数据表为表字段应用常见的约束

3.1.数据表的约束需求

该张数据表的约束条件如下,根据不同字段的不同约束,完成数据表的创建。

字段名字段含义字段类型约束条件约束关键字
idIDint主键,字段增长PRIMARY KEY,AUTO_INCREMENT
xm姓名varchar(10)不为空,不允许重复NOT NULL,UNIQUE
nl年龄int大于0并且小于等于120CHECK
zt状态char(1)如果没有指定该值,默认为1DEFAULT
xb性别char(1)

3.2.根据约束需求创建出数据表

create table erp_user (
	id int primary key auto_increment comment '主键id',
	xm varchar(10) not null unique comment '姓名',
	nl int check ( nl > 0 && nl <= 120 ) comment '年龄',
	zt char(1) default '1' comment '状态',
	xb char(1) comment '性别'
) comment '用户表'

3.2.在表中写入数据严重约束是否生效

1)验证id字段的主键约束

首先在表中写入2条数据,不指定id字段的数据,验证id字段是否会自动增长并且都是唯一的。

insert into erp_user (xm,nl,zt,xb) values('小明','19','1','男'),('小红','26','1','女');

数据写入成功,可以看到虽然没有指定id字段写入数据,但是我们对id字段设置了主键约束,因此数据写入后,id字段会自动增长并且还是唯一的。

image-20220515162820142

2)验证xm字段的不为空、不允许重复的约束

我们在表中再写入一条数据,指定xm字段为null,观察效果。

insert into erp_user (xm,nl,zt,xb) values(null,'36','1','男');

当xm字段为null时,就提示我们写入失败了,并且返回说xm字段不允许为空。

image-20220515163053188

然后我们再写入一条xm为小明的数据,验证姓名字段是否不为空。

insert into erp_user (xm,nl,zt,xb) values('小明','36','1','男');

此时依旧插入数据失败,并且提示我们说xm字段已经包含小明了,不允许插入。

image-20220515163227080

3)验证nl字段的check检查约束

在前面指定nl字段的check条件为大于0并且小于120岁的数据,下面我们来插入一条年龄在0-120岁之间的数据,观察数据写入情况。

insert into erp_user (xm,nl,zt,xb) values('小江','88','1','男');

数据写入成功了,但是也会看到主键的ID不一样了,变成了,不应该是3吗,那是应为在前面验证数据唯一性时,数据虽然插入失败了,但是却向表中申请了一个主键。

image-20220515163453893

现在在表中插入一条大于120岁的数据,观察写入效果。

insert into erp_user (xm,nl,zt,xb) values('小哦','129','1','男');

由于nl字段规定的条件就是0-120,超过120就认为违反条件了,此时就会拒绝写入,由于内容并不符合约束条件,因此不会去申请一个主键。

image-20220515163855958

4)验证zt字段的默认值约束

向表中写入一条数据,不指定zt字段,观察写入效果。

insert into erp_user (xm,nl,xb) values('小花','21','男');

数据写入成功,当不指定zt字段时,应用默认约束,自动写入1。

image-20220515164943193

举报

相关推荐

0 条评论