表的约束【MYSQL】

发布时间:2023年12月25日


一. 什么是约束?

约束,这个词到时十分易懂。
那数据库具体是约束什么的,不用想就是数据

所以通过约束
让数据库中的数据符合预期
这个是通过技术手段,倒逼用户插入合法数据

所以可以说凡是通过约束后插入的数据都是符合约束的。

二. 各种约束

2.1 非空:not null

非空很简单
就是说用户对该字段的数据不能插入空

在这里插入图片描述

这里可以自己创建一个试试

在这里插入图片描述

这里会提示禁止插入空

2.2 默认值:default

类似以前Cpp中能见到的缺省值
就是字段的默认值

在这里插入图片描述
这里创建了一张表用来演示
在这里插入图片描述
这里对t2进行插入,带有默认值的t1则不插入
在这里插入图片描述
这里能看到t1果然被插入了10

这里要注意:
如果没有设置default,数据库会自己带上一个default null
这里我们来查看一下
在这里插入图片描述
这里用show create table table_name
可以查看数据表各个属性
在这里插入图片描述
这里能发现自带上了null

但是如果
设置了非空约束,那就不会设置default null。

2.3 列描述:comment

这个comment,其实在以前博客中使用过。

这个主要的作用是给用户进行查看的
便于用户知道该字段的具体描述。

在这里插入图片描述

如果要查看描述:
用上面的show create table table_name 即可
在这里插入图片描述

2.4 zerofill

这个约束其实就是填充零的作用。
这里就直接上手使用,使用后就明白了

这里创建一个zerofill约束的id
在这里插入图片描述
然后插入1
在这里插入图片描述
能发现结果自动被填充0了
在这里插入图片描述

但是这里可能有点疑问,数据库是如何判断填充多少个0的。
这里查看一下表结构:
在这里插入图片描述
这里我们可以看到id的约束多了个unsigned
所以要注意,设置zerofill的时候,同时也会将字段设置成unsigned类型

同时这里我们能看到int(10)
这个10,按道理来说不是int的大小
因为做整形的大小是固定的

所以这个10的作用就是专门为zerofill服务的
能看到上面1插入id后,填充的数量正好是10个。

2.5 主键约束primary key

主键约束

这里先解释一下主键约束存在的意义是什么
其实主键也没有这么难理解
它的作用可以看成是现实中的学号。
通过学号能找到一个学生的各种信息,成绩,家庭住址……
所以有了学号后,就方便通过学号对一个人的所有信息进行查找。

所以将一个字段设置成学号类似作用的主键,当然也要受到想学号一样的限制

这里也能想到学号的特点:
1.不能为空
只要是学生就要有学号,学号为空是没有意义的,除非你不是本校生

2.不能重复
一个学号代表的是一个学生的信息,所以学号不能重复。

所以被主键约束的字段数据具有非空,唯一的特点

同时要注意一个表只能有一个主键

2.5.1 两种添加方式:

这里我们知道主键是什么后,接下来就是学习如何对表进行主键的添加。

1.创建时:
在这里插入图片描述

直接在创建的字段后加上primary key

2.对创建完的表进行添加
在这里插入图片描述

alter table 表名 add primary key(字段名字);

在这里插入图片描述

2.5.2 删除主键

这里主键添加错了,也可以进行删除的操作

alter table 表名 drop primary key

在这里插入图片描述

2.5.3 复合主键

前面提到了,我们说过表中只有一个主键

但是不代表一个主键只能添加给一列

所以可以将多行设置成主键,这样就变成了复合主键。

2.5.3.1 两种添加方式

primary key(id,course_id);

这个复合主键设置的两个字段可以相互不同,但是不能全部相同。

在这里插入图片描述
这里随便添加了几个数据。

这个是两个id和id_course两个主键
这个很符合我们现实中选课的方式:

一个人可以选多种课程,但是不能选重复相同的课

2.6.自增长 auto_increment

这个auto_increment也属于主键,只不过是给主键添加了一个自增长的属性。

这里我们可以来用一下。
在这里插入图片描述
这里能发现一个表中主键id有auto_increment属性。

这里先不管id,直接先随便插入几条数据
在这里插入图片描述
**加粗样式**
能发现这里的id,命名没有设置添加具体的数值,但是自己从1开始按序自增。

2.6.1 添加自增长

create table 表名(
id int unsigned primary key auto_increment
);

在这里插入图片描述

2.6.2 设置初始值

这里我们还可以设置auto_increment的增长初始值

create table table_name(
id int primary key auto_increment)auto_increment=500;

在这里插入图片描述
这里创建了一个表用来演示
在这里插入图片描述
这里能看到增长初始值变成了500

2.7 唯一键 unique

2.7.1 存在意义(与主键的区别)

唯一键顾名思义,和主键的限制差不多,同样是非空,唯一

那这里可能有人不理解唯一键存在的意义,既然主键和唯一键的限制一样,为什么要有唯一键的存在

因为主键和唯一键存在的意义不一样
主键的作用和学号一样,希望通过唯一的学号来查到每一个学生的信息
一个表中只能有一个学号这样的存在,也就是说一个表只能有一个主键

但是还有很多字段需要用到非空,唯一这个的限制
比如说运动员表中:
运动员牌号作为了主键
那冠军和亚军季军也同样是不能有相同的获得者,但是冠军亚军已经不能是主键了。
这个时候唯一键就派上用场了。

添加唯一键:

字段名 字段类型 unique;

在这里插入图片描述
这个name后面的unique就是唯一键。

2.8 外键约束 foreign key

我们要学习外键,首先就要知道它的存在意义(作用)

2.8.1 存在意义

简单来说外键的作用就是:
1.关联
2.约束

这里想一下:
用在两个表在业务上具有相关性,但是插入数据时却不受约束,这想想就会造成很大的问题

比如说:

这里有一个货物表:
在这里插入图片描述
同时有一个购买表:
在这里插入图片描述

这里能看到这个表插入了一个货物表中没有的货物。

这样肯定是不符合现实的要求了。
所以这个时候外键就闪亮登场了。

2.8.2 添加外键约束方法:

这里添加键的时候要注意:
1.外键约束定义在从表上
2.主表则必须有主键约束或unique约束
3.定义外键后,要求外键列数据必须在主表的主键列存在

alter table 从表 add foreign key(字段名) references 主表(字段名)

在这里插入图片描述

这里能看到添加外键约束失败,这是因为现有的数据中有冲突的数据
在这里插入图片描述

(https://img-blog.csdnimg.cn/direct/35b32ec441b94611a0f6e64c7930c55e.png)
这里将图片删除后,就能正常进行添加了

在这里插入图片描述

这里我们同样还能对good_name添加外键。

在这里插入图片描述
这里添加完了以后

在从表purchase插入数据时就会进行检查,发现主表goods中没有的都会进行报错
在这里插入图片描述
只有符合主表中的内容才能进行插入。
在这里插入图片描述

2.8.3 删除外键约束:

这里想要删除外键约束
首先需要show查看约束的代名,
在这里插入图片描述
这里两个都是外键约束的代号
接下来通过这个代号就可以对外键约束进行删除

alter table purchase drop foreign key [外键代号]

然后drop foreignkey处加上代名

文章来源:https://blog.csdn.net/Ruaaa_iiiiiiiii/article/details/135122937
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。