我是小白,刚接触MySQL不久,现阶段正在学习,为此在这里留下自己的学习笔记。如果有错误的地方还请大家见谅,评论或者私发我错误的地方哦,谢谢大家,嘿嘿~
外键(foreign key)
引言:
要使两张表形成关联,外键只能引用外表中的列的值或使用空值。可以保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。
解释数据库多对多的关系:
比如 一名学生可以同时选修多门课程,一门课程也可以被多名学生选修。
下表,可以把表a拆分成表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加想要加的条件。
此篇为外键多对多。
如果您感觉有用的话,请点赞评论分享收藏哦,非常感谢,好人一生平安!!
祝大家天天开心❀❀❀❀❀❀*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。