天天看点

数据库常用命令之外键(foreign key)多对多(总结,基础)

作者:萨摩耶欸

我是小白,刚接触MySQL不久,现阶段正在学习,为此在这里留下自己的学习笔记。如果有错误的地方还请大家见谅,评论或者私发我错误的地方哦,谢谢大家,嘿嘿~

上一篇为外键多对一,传送门:多对一

外键(foreign key)

引言:

要使两张表形成关联,外键只能引用外表中的列的值或使用空值。可以保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。

解释数据库多对多的关系:

比如 一名学生可以同时选修多门课程,一门课程也可以被多名学生选修。

下表,可以把表a拆分成表b

数据库常用命令之外键(foreign key)多对多(总结,基础)
表a
数据库常用命令之外键(foreign key)多对多(总结,基础)

表b

s2c为表a中两张表的中间桥梁。

s2c可以和student产生多对一的关系,也可以和course产生多对一的关系。这样间接的student表与course表构成了多对多关系。

创建表

创建student表:

create table student(
id int primary key auto_increment,
name varchar(16),
age int
);           

创建course表:

create table course(
id int primary key auto_increment,
cname varchar(16),
price int
);           

运行截图

数据库常用命令之外键(foreign key)多对多(总结,基础)

创建s2c表:

create table s2c(
id int primary key auto_increment,
student_id int,
course_id int,
unique key(student_id,course_id),
foreign key(student_id) references student(id)
on update cascade on delete cascade,
foreign key(course_id) references course(id)
on update cascade on delete cascade
);           
数据库常用命令之外键(foreign key)多对多(总结,基础)

插入值

插入student值:

insert into student(name,age) values
('恪',27),
('顾',17),
('盛',17),
('停',35),
('原',33);           

插入course值:

insert into course(cname,price) values
('draw',800),
('photograp',500),
('math',1000),
('physics',1500),
('write',1200);           

插入s2c值(需要用到联合唯一这个约束条件):

insert into s2c(student_id,course_id) values
(1,1),
(1,3),
(2,2),
(2,5),
(3,4),
(3,5),
(4,1),
(4,5),
(5,3),
(5,5);           
数据库常用命令之外键(foreign key)多对多(总结,基础)

s2c表完成了关联学生表与课程表之间的关联。

整体查询:

select student.id,name,age,cname,price from student,course,s2c where student.id = s2c.student_id and course.id = s2c.course_id;           
数据库常用命令之外键(foreign key)多对多(总结,基础)

注:

select * from student,course,s2c;           
数据库常用命令之外键(foreign key)多对多(总结,基础)
数据库常用命令之外键(foreign key)多对多(总结,基础)

单纯地查询三个表的时候重复数据很多,所以需要筛选。像s2c表中student_id就是student表中的id,course_id就是course表中的id,这两个值的作用是用来关联两个student表与course表,并不需要显示以及反复组合。而三个表中的id也不需要全部显示。所以需要加条件:

1.仅需要显示student表中的id,name,age,cname,price。(id需要明确是哪个表中的id,不然系统分不清会报错。);

2.需要加条件where student.id = s2c.student_id and course.id = s2c.course_id,筛选关联之后的表。

查询某个值:

select student.id,name,age,cname,price from student,course,s2c where student.id = s2c.student_id and course.id = s2c.course_id and student.name = '停';           
数据库常用命令之外键(foreign key)多对多(总结,基础)

查询某个值也是加条件查询的。用and加想要加的条件。

此篇为外键多对多。

如果您感觉有用的话,请点赞评论分享收藏哦,非常感谢,好人一生平安!!

祝大家天天开心❀❀❀❀❀❀*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。

继续阅读