我是小白,刚接触MySQL不久,现阶段正在学习,为此在这里留下自己的学习笔记。如果有错误的地方还请大家见谅,评论或者私发我错误的地方哦,谢谢大家,嘿嘿~
上一篇为外键多对一,传送门:多对一
外键(foreign key)
引言:
要使两张表形成关联,外键只能引用外表中的列的值或使用空值。可以保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。
解释数据库多对多的关系:
比如 一名学生可以同时选修多门课程,一门课程也可以被多名学生选修。
下表,可以把表a拆分成表b
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiMGc902byZ2PhJDOkJTZyUmYxQmZ4UGZiJ2NmRzYmdjMkJ2MjJTYygzLcBza5QTcsJja2FXLp1ibj1ycvR3Lc5Wanlmcv9CXt92YucWbp9WYpRXdvRnL5A3Lc9CX6MHc0RHaiojIsJye.jpg)
表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
);
运行截图
创建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
);
插入值
插入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);
s2c表完成了关联学生表与课程表之间的关联。
查
整体查询:
select student.id,name,age,cname,price from student,course,s2c where student.id = s2c.student_id and course.id = s2c.course_id;
注:
select * from student,course,s2c;
单纯地查询三个表的时候重复数据很多,所以需要筛选。像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 = '停';
查询某个值也是加条件查询的。用and加想要加的条件。
此篇为外键多对多。
如果您感觉有用的话,请点赞评论分享收藏哦,非常感谢,好人一生平安!!
祝大家天天开心❀❀❀❀❀❀*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。