天天看點

資料庫常用指令之外鍵(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加想要加的條件。

此篇為外鍵多對多。

如果您感覺有用的話,請點贊評論分享收藏哦,非常感謝,好人一生平安!!

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

繼續閱讀