数据库主键与外键

刚刚学习的时候,主键和外键弄不懂,现在终于弄懂了。

一、什么是主键、外键:

关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键 
比如  
学生表(学号,姓名,性别,班级
姓名,性别,班级都可以重复,而学号是不会重复的,所以每个学生的学号是唯一的,学号就是一个主键 
课程表(课程编号,课程名,学分
其中课程编号是唯一的,课程编号就是一个主键 
成绩表(学号,课程号,成绩
成绩表中单一一个属性无法唯一标识一条记录,只知道学号,无法确定是哪门课的成绩,只知道课程号,不知道学号,无法确定是哪个学生的成绩所以 学号和课程号的属性组是一个主键 
  
成绩表中的学号不是成绩表的主键,但它和学生表中的学号相对应,并且学生表中的学号是学生表的主键,则称成绩表中的学号是学生表的外键
同理 成绩表中的课程号是课程表的外键 

  这个时候,我们新建三张表,名为student,course,grade.


如上图所示,这时,student中的id和course中的cid,都为主键,且都为grade的外键

表中的数据如下所示


student表




course表



grade表

 

主键

外键


定义:

唯一标识一条记录,不能有重复的,不允许为空

表的外键是另一表的主键外键可以有重复的, 可以是空值


作用:

用来保证数据完整性

用来和其他表建立联系用的


个数:

主键只能有一个

一个表可以有多个外键


这个时候,我们就理解了为什么外键可以有重复的了!!!

添加外键的MySQL语句为

alter table grade add CONSTRAINT FK_ID foreign key(id) REFERENCES student(id);
alter table grade add CONSTRAINT FK_ID1 foreign key(cid) REFERENCES course(cid);


删除外键的MYSQL语句为

alter table grade drop foreign key FK_ID;
alter table grade drop foreign key FK_ID1;

外键的删除问题

我们已知外键删除的时候,有四种参数

分别是 cascade,set null,no action,restrict

参数名称 功能描述
cascade 删除包含与已删除键值有参照关系的所有记录
set null 修改包含与已删除键值有参照关系的所有记录,使用null值代替,但是无法修改nut null值的数
no action 不进行任何操作
restrict 拒绝主表删除或修改外键关联列

首先我们将student的id 作为 grade的外键,course不做处理




猜你喜欢

转载自blog.csdn.net/yutong5818/article/details/80845936