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

我是小白,刚接触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加想要加的条件。

此篇为外键多对多。

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

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

猜你喜欢

转载自blog.csdn.net/m0_50962679/article/details/123310595