欢迎回来!本篇文章为不了解数据库,或者将要学数据库却不知道它具体是什么的伙伴们介绍数据库的基础知识,同时小编也会用每一小节学到的新知识,一步一步搭建出一个完整的大一新生数据库系统,小编争取每天都会更新一节,零基础的小伙伴也可以跟着小编一起搭建自己的一个数据库系统!:
前面我们讲解了的约束一部分知识点,这一章我们重点讲解一下外键约束,并用实际案例演示一遍,在讲解外键约束之前我们先在我们史莱克新生数据库系统里添加一个记录我们学校老师的表格,顺便演示一下上节我们学习到的约束的用法:
# 创建具有约束条件的表格
我们先来分析一下一张表格会用上哪些约束条件:首先这个表格中要有id,他就像我们每个人的省份证号一样,是我们身份的一种证明标识,他必须具备唯一性,同时我还希望他能够自动增长最好,这样我们就不用在创建表格时一个一个的输入id了,那么要实现这些需求我们需要用到的约束条件就是:‘主键’,‘自动增长’。他们对应的约束关键字是‘primary key’和‘auto_increment’。
其次,表格中还有姓名,而考虑到学校这么多人我们希望姓名不为空就可以了,约束关键字为‘not null’
然后是年龄和和课程序号,每个人年龄坑定都是大于0的,而且如果没有特殊情况的话在座的大部分人年龄应该是要小于150的(修仙的几个先站起来一下),课程序号也同理,所以这里我们需要用检查约束,约束关键字‘check’
注意这里的检查约束需要8.0.16版本之后才具备
接着是教授的课程和性别,这两个就没什么要求,所以可以不加约束。
OK分析完了就让我们动手创建一个有约束条件的教师表:
如果大家嫌手动建表太麻烦了,也可以在MySQL里面直接新建一个,同时也可以直接选择表中每个字段所需要的约束




可以看到就算我们在添加数据时没有管id他也会自动填写,并且自动增加。接着小编在演示一下如果我们填写的数据超过了约束条件会怎样:

可以看到我们的数据一旦超出了约束的范围执行后后就会报错。

这里我们直接就创建好了一个由于是条件的教师表
## 外键与外键约束
外键是用来让两张表的数据之间建立连接,保证数据的一致性和完整性。接下来大家可以思考一个问题,当一个学校的每一门课是有好几个老师教,而一个老师也有可能任教好评几门课程,那么如果我们把课程信息和老师记录在一张表上,就像我们上面那一张teacher表格一样,那么我们要怎样表示学生的选课信息呢,这样两张表就没法很好的表达出所有信息了。这个时候我们就需要把课程信息单独用一张表来记录。


然后我们只需要将学生选的课的id填在学生表的课程那一栏就可以了:

这样学生表里面的c_id就与课程表里id产生了关联,学生表叫做子表,课程表叫做父表我,不过现在这种关联还只是我们逻辑上的,是我们知道课程表id为3的课刚好是某同学选的课所以我们把3写在了学生选课的c_id里,但如果某天我们一不小心误删了课程表id为3的字段,或者那天我们把id为3的表改下名字,那岂不是要把所有学生的课程id全都改一遍,这显然是不可能的,为了解决这个问题,我们就需要给这两个表建立外键约束(具体语法在上一节已经告诉大家了)

而有了外间的关联,这个时候我们再去删除或者修改course表中的数据就会报错

下面我们补充一下外键的删除和更新行为:
下面我把外键改为了cascade,在修改课程表主键名试试看:


可以看到,我们又可以修改父表数据了,我们删掉了id为7的字段,而选了这门课的学生数据也一起被删除了。
那么以上就是这小节的全部内容,我们下一节再见



