资讯动态

数据库原理及运用(初识)第五节:#外键与外键约束

发布时间:2026/9/24 17:52:14 来源:尧图企业网站定制
欢迎回来本篇文章为不了解数据库或者将要学数据库却不知道它具体是什么的伙伴们介绍数据库的基础知识同时小编也会用每一小节学到的新知识一步一步搭建出一个完整的大一新生数据库系统小编争取每天都会更新一节零基础的小伙伴也可以跟着小编一起搭建自己的一个数据库系统前面我们讲解了的约束一部分知识点这一章我们重点讲解一下外键约束并用实际案例演示一遍在讲解外键约束之前我们先在我们史莱克新生数据库系统里添加一个记录我们学校老师的表格顺便演示一下上节我们学习到的约束的用法# 创建具有约束条件的表格我们先来分析一下一张表格会用上哪些约束条件首先这个表格中要有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表中的数据就会报错下面我们补充一下外键的删除和更新行为NO ACTION当在父表中删除/更新对应记录时首先检查该记录是否有对应外键如果有则不允许删除/更新。RESTRICT当在父表中删除/更新对应记录时首先检查该记录是否有对应外键她果有则不允许删除/更新。与NO ACTION一致)CASCADE当在父表中删除/更新对应记录时首先检查该记录是否有对应外键如果有则也删除/更新外键在子表中的记录。SET NULL当在父表中删除对应记录时首先检查该记录是否有对应外键如果有则设置子表中该外键值为null这就要求该外键允许取null)。SET DEFAULT父表有变更时子表将外键列设置成一个默认的值(Innodb不支持)下面我把外键改为了cascade在修改课程表主键名试试看可以看到我们又可以修改父表数据了我们删掉了id为7的字段而选了这门课的学生数据也一起被删除了。那么以上就是这小节的全部内容我们下一节再见

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价