数据库回顾(六) 数据库约束概述(下篇)

124 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

大家好! 我是慕歌,一只想教你学习 后端技术的野生coder! 欢迎来到慕歌的数据库系列教程,希望通过这个教程带大家深入学习数据库技术,该教程所有知识点均来源于本人的日常学习与开发中,如有疑问请与我联系!

前言

在上一节的分享中,慕歌向大家分享关于数据库约束的部分介绍。主要介绍了非空约束,唯一约束以及主键约束的语法创建以及,数据表建立后如何进行约束的追加,删除。非空约束主要是对内容形式的要求,对于所有数据类型都生效,且非空约束只能作用一列数据字段。唯一约束依靠唯一索引的建立,确保字段的唯一性,唯一性约束作用于一个或多个字段,删除唯一约束只需删除索引即可。主键约束是最有特殊的存在,在每一张数据表中,主键约束也依赖于主键索引,主键也可作用于多个字段。
以上就是对约束的回顾,主要从语法,使用规则,约束作用角度进行分析。

数据约束

约束查询:

当我们想知道当前数据表中的约束时:

#表名称
SELECT * FROM information_schema.table_constraints 
WHERE table_name = '表名称';

外键约束:

**作用:**用于限定某个表字段的引用完整性,存在于主表与从表之间

#关键字:FOREIGN KEY 指定列, reference 指定参考关系
#主表语法
CREATE TABLE tab_name1(
	col_name1 type PRIMARY KEY,
	col_name2 type NOT NULL
);

#从表语法
CREATE TABLE tab_name2(
	col_name1 type PRIMARY KEY,
	col_name2 type NOT NULL,
	FOREIGN KEY(col-name1) references table_name1(col_name1)
);
#说明:外键约束一定是两个表之间建立,有主表与从表之分
#主表提供主要字段,作为参考
#从表的该字段受主表参考的影响
#主表字段与从表的字段类型,逻辑必须一致

#示例:
#在从表中指定外键约束
#emp表的deptid和和dept表的did的数据类型一致,意义都是表示部门的编号
create table dept( #主表
	did int primary key,		#部门编号
    dname varchar(50)			#部门名称
);

create table emp(#从表
	eid int primary key,  #员工编号
    ename varchar(5),     #员工姓名
    deptid int,				#员工所在的部门
    foreign key (deptid) references dept(did)   
);

#说明:
#主表在从表之前建立
#删除表时,先删除从表,在删除主表

特点:

  • 外键约束是对引用关系的约束,需要具有引用意义
  • 外键约束约束两个表的一个列,对该列的数据具有要求
  • 两个列的数据类型,逻辑需要一致,字段名可不一致

主外表关系:

  • 约束针对关联字段双方
  • 主表的修改删除受主表约束
  • 从表的修改删除受主表约束
  • 主表先于从表存在
  • 删除主表时,先删除从表

建议:

  • 外键约束不一定需要建立
  • 外键约束导致的限制会降低效率
  • 外键约束可以通过业务进行实现,而不是在数据库端
  • 外键约束将消耗一定资源,消耗数据库性能

自增约束

**作用:**会对字段进行自增操作

#关键字:AUTO_INCREMENT
#语法
CREATE TABLE tab_name(
	col_name1  type default value ,
    col_name2  type unique key auto_increment,  
    primary key(col_name)
);

#示例:
#建立员工表,员工号为主键,并自增
create table employee(
	eid int primary key auto_increment,
    ename varchar(20)
);

#追加约束
alter table table modify col_name type auto_increment;

#删除约束
alter table table modify col_name type;

特点:

  • 一个表只能有一个自增列
  • 自增列必须具有键的约束
  • 自增 的数据类型只能是整数型
  • 自增会在最大值的基础上进行自增

检查约束

**作用:**检查某个字段是否满足某些要求,如值的范围

#关键字:CHECK
#语法
CREATE TABLE tab_name(
	col_name1 type CHECK( condition ),
	col_name2 type NOT NULL
);

#示例:
#要求员工的性别必须为男女其中的一种
create table employee(
	eid int primary key,
    ename varchar(5),
    gender char check ('男' or '女')
);

#说明:这种约束类似于判断,要求数据必须满足某种条件

特点:

  • 依赖于函数的内容,需要定制函数进行检查
  • 作用于某一个字段,对数据类型具有要求
  • 检查约束是MYSQL 8.0 的新特性

思考:

设置非空约束的意义?
空值不是数据类型,在进行统计的是否无法统计
设置默认值的意义?
默认值能够避免null 值问题,应在列中尽可能的使用
自增的意义?
自增约束于主键常共存,为更好保证实体的完整性约束

结语

这一节的分享到这里就结束了,下一节将带来数据库视图的分享学习!
如果您觉得本文不错,欢迎点赞支持,您的关注是我坚持的动力!