终于把 MySQL 的主外键搞懂了

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Maxiao1204/article/details/52733333

基础是我的前面一篇关于主外键的关系的文章

首先创建 3 张表,并插入相应的数据:

create table student(
sid int(10) primary key not null,
name char(120),
sex char(120),
dept char(120)
);

插入数据
insert into student
values
(1,"mmm","nan","jisuanji dept");
insert into student
values
(2,"nnnn","nv","jiusanji dept");
insert into student
values
(3,"sss","nan","jisuanji dept");

创建一张课程表
create table course(
cid int(10) primary key not null,
cname char(120),
ccredit int(10)
);

插入数据:
insert into course
values
(11,"jisuanji",10);
insert into course
values
(12,"C_yuyan",8);
insert into course
values
(13,"C++",9);

创建学生选课表
create table stucourse(
scid int(10) primary key not null,
sid int(10),
cid int(10),
foreign key(sid) references student(sid),
foreign key(cid) references course(cid),
grade int(10)
);

插入数据
insert into stucourse
values
(1,1,11,90);
insert into stucourse
values
(2,1,12,88);
insert into stucoruse
values
(3,2,13,86);
insert into stucourse
values
(4,3,11,78);

在第三张表里面,设置了 stucourse 的外键链接,分别引用了 student  的 sid 外键 和 course 的 cid 外键

注意:外键的属性归属于主表,比如这里的 sid 是表 student 的外键,cid 是表 course 的外键,这两个字段由于被从表 stucourse 所引用,所以成为了外键,而并不是说 sid 和 cid 是从表 stucourse 的外键,外键只是对主表而言的,从表只是引用外键,并且 sid 和 cid 一起决定了一条记录,也就是哪个学生选了哪门课程,并且在 stucourse 表里面记录了该课程的成绩 grade,所以当 stucourse 表里面没有插入相关数据的时候,删除 student 表或者是 course 表里面的一条记录或者字段,是可以的,但是一旦 stucourse 表里面添加了相关数据,就不能删除 student 表 和 course 表里面的一条记录了,但是可以删除除了主键之外的某个字段。因为 student 表和 course 表之间没有主外键关系,他俩之间是不受约束的,只是他俩同时被 stucourse 表所约束

主表的数据包括表本身不能被随便删除,从表的数据包括表本身可以随便删除

猜你喜欢

转载自blog.csdn.net/Maxiao1204/article/details/52733333