【MySQL】在学习外键约束和插入新元素时必踩的坑!(阿里云可视化操作)

目录

一、参照完整性规则

1.简单的概念

2.实际操作往往遇到麻烦(注意事项)

 二、以一张课程表为例

三、新手插入数据常犯错误


一、参照完整性规则

1.简单的概念

⚪外键可以为空值

⚪外键的值(如果有的话)必须等于某个主键的值

⚪空值表示该外键暂未分配

⚪非空值表示外键值引用了某一主键

⚪外键是对主键的引用

2.实际操作往往遇到麻烦(注意事项)

⚪在表中变更时一定要留意与之关联的外键

⚪例如,在B表中有一个外键指向A表中的同一个属性名,如课程表中有外键学号3指向学生表中的学号3,这时在学生表中尝试单独删除这个学生的元组信息就会报错。正确的方法是先删除后者再删除前者。外键的存在使得这两个键之间存在了一定的依赖关系,导致,B中的数据不能脱离A中对应数据独立存在(有外键的情况下)。

尝试单独删除外码表对应主码的数值,

 执行结果:

 结果很显然,不可以做到。

所以我们先删除依赖那个主码数据的外键对应的数据:


 二、以一张课程表为例

例子:一个数据库R(A,B)=课程(课程号,课程名,预修课,学分)

预修课:选修课前必须修的课程,例如:想要选修数据结构的前提是修了C语言这门课程。

编辑课程表的可视化操作如下 (阿里云服务器DMS控制台):

 基本信息:

列信息:

索引信息:

 外键信息:

三、新手插入数据常犯错误

根据上面给出的Course表的创建,使得插入后的表结果如下:

 

 注意:因为这里的Cpno为一个引用Cno的外键,而在控制台上直接点击提交修改本质上也是转化为SQL语句执行的,所以相当与执行了7次Insert操作,

 如果点击直接执行:

 Opos!

 开不开心?

这个主码和外码的依赖关系可以看作一个链表,链表的操作不可能是从中间开始的(注意这里每一条语句都是顺序执行的插入),所以从第一次插入开始就有问题了,系统并不知道先行课5在哪里,要知道第一次执行时只有一个元素。

所以我们可以按照倒序链表的形式来插入语句,确保最后一个插入不需要引用后面的未知元素,以此类推。

修改完毕:

 正常执行

成功

 

 实际插入元素时,注意不要出现对数据表中未出现的属性值的引用即可。

posted @ 2023-12-12 01:33  IoOozZzz  阅读(58)  评论(0)    收藏  举报  来源