先说点基础知识,每张表必须要有主键,先有主键才有外键,没有主键,是添加不成功外键的。
在很多时候我们需要两张表甚至三张表进行关联查询,这时候就需要用到外键了,但有的人说用外键效率不高,用冗余。
这里暂时不讲冗余,只聊一下外键:
接着上面的讲,两张表要关联查询,一般都有主表和从表的,例如
建一张学生表student,如下图:
---------------------
在建一张分数表score ,如下图:
我们来分析,先要有学生才会有分数,所以要查找某一位学生的分数,肯定是先查学生,所以这里,学生表是主表,分数表是从表(也有人叫子表),
建子表的时候,你得知道这是那个学生的分数吧,所以就得引用主表中的学号stuid字段(列)。
上述表中的id是主键;
这时候要关联两张表(或者说约束)就利用外键,当然谁引用,就让谁创建外键,上面是score表中引用了student的学号stuid字段,所以就在score表中创建外键。都是从(子)表创建外键。
create table score(id int primary key,
name varchar(20),
stuid int,
score int
constraint fk_student_score_stuid foreign key(stuid) references student(stuid));
加了一个名称为fk_student_score_stuid 外键约束,给stuid这一列加的,key(stuid)是指score表中的这一列,引用了student这张表中的stuid,不用说student(stuid)中的stuid肯定是指student表中的stuid字段。
---------------------