文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Mysql05——外键约束

2023-12-23 21:36

关注

MySQL外键约束

一、MySQL外键约束作用

外键约束(Foreign Key)即数据库中两个数据表之间的某个列建立的一种联系。这种联系通常是以实际场景中含义完全相同的字段所造成的。MySQL通过外键约束的引入,可以使得数据表中的数据完整性更强,也更符合显示情况。

在 MySQL 中,外键约束是一种用于维护表之间关系的约束。外键约束可以用来指定一个或多个列作为外键,并将其连接到另一个表中的主键或唯一键上。这可以确保数据的完整性,并支持关系型数据库的引用完整性。

下面,我举一个例子来说明MySQL外键约束的作用。

假如我们对大学学生成绩管理系统建立数据库,有两张表,一张表是学生表,存储了学生的学号、姓名、性别、院系等信息,还有一张表是成绩表,存储了学生学号、课程编号、考试成绩等信息。这样,这两张表之间就会通过学生学号建立外键约束。很自然的我们想到,成绩表的学生学号依赖于学生表的学生学号存在,如果一个学生毕业、或者退学,从学生表中删除时,那么他的相关成绩也就没有必要在成绩表中存在了。在没有创建外键关系之前,这两张表完全是独立存在的,我们可以强行在成绩表中插入一个不存在学生的相关成绩,也可以强行删除学生表中的一个学生,并且不管其成绩信息是否在成绩表中存在。但是,在建立外键关系后,MySQL数据库会约束上述两种行为,每次对数据进行插入或者删除时,都会检查数据完整性,使得我们的操作必须符合实际情况。

在这里插入图片描述

二、外键约束创建及应用

定义外键时,需要遵守下列规则:

在 CREATE TABLE 语句中,通过 FOREIGN KEY

在创建数据表时创建外键约束,只需要在创建数据表的create语句后面,使用foreign key关键字指定本表的外键字段,使用reference关键字指定关联表的关联字段,并且明确约束行为即可。

[CONSTRAINT <外键名>] FOREIGN KEY 字段名 [,字段名2,…]REFERENCES <主表名> 主键列1 [,主键列2,…]

示例

1、创建一个班级表

create table class (      cno int(4) auto_increment,     cname varchar(12) not null,      room  varchar(4),       primary key(cno)  );

2、插入数据

insert into class values (null,'bigdata001',101);  insert into class values (null,'bigdata002',102);  insert into class values (null,'bigdata003',101); 

3、查询数据

select * from class;

4、创建一个学生表

create table student(      sno int(6) primary key auto_increment,      name varchar(12),      sex char(1),      age int(2),      classno int(4),      constraint fk_stu_classno foreign key (classno) references class(cno)  );

当外键约束被添加后,以下行为会发生:

5 插入数据

insert into student values(null,'张三','男',23,1);  insert into student values(null,'李四','男',24,1);  insert into student values(null,'王五','男',16,2);  

6、查询student表数据

select * from student

7、尝试删除、更改1班

delete from class where cno=1; update class set cno=5 where cno=2;

img

因为存在外键,class表中cno=1中有学生存在,所以删除不了。

如果想删除1班,请手动先对1班学生进行处理(删除或者清空外键)

 update student set classno=null where classno=1;

8、再次删除cno=1的班级

delete from class where cno=1;

9、修改外键设置:外键要修改只能先删除再添加

如果希望在更新班级号的时候,可以直接更新学生的班级编号;希望在删除某个班级的时候,清空学生的班级编号

(1)删除外键

alter table student drop foreign key fk_stu_classno;

2)修改外键设置

alter table student add constraint fk_stu_classno foreign key(classno) references class(cno) on delete set null on update cascade;

通过创建外键约束,当进行插入或更新操作时,数据库会自动检查外键的值是否存在于参照表中的主键或唯一键中。如果外键引用不存在,操作将被拒绝,并引发错误。

需要注意以下几点:

上述是在 MySQL 中使用外键约束的基本步骤。外键约束可以帮助维护表之间的关系,并确保数据的一致性和完整性。

来源地址:https://blog.csdn.net/tonyshi1989/article/details/132625975

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯