外键是唯一的吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了外键是唯一的吗?相关的知识,希望对你有一定的参考价值。
表A的主键是aId,外键是bId,表B的主键是bId。
如果
select * from A
where aId = '101'
那得得出来的必然是一条记录集,也就是一行。
如果
select * from A
where bId = '011'
的话,查询出来的结果会不会有多条?也就是多行?如果是的话,和表B有何关系 ?
外键在其他表是主键,是唯一值,
在本表可以有多个,
它的约束是,如果其他表没有某个主键值,在本表就不能插入这个外键值。 参考技术A 表A的bid的值必须是表b的bid中的值。不过表A的bid的值可以重复。
MySQL外键(详解)
MySQL外键(详解)
什么是外键:
外键是指引用另外一个表中的一列或多列数据,被引用的列应该具有主键约束或者唯一性约束(简单来说外键是另一个表的主键或者唯一约束)。外键可以有重复的, 可以是空值,用来建立和加强两个表数据之间的连接
一、主外键关系
在上图上涉及的两个表中,学生信息表 (stuInfo)为主表,学生
成绩表(score)为从表;那么主从表之间有什么关系呢?
1、当主表中没有对应的记录时,不能将记录添加到子表
--------学生成绩表中不能出现学生信息表中没有的学号
2、不能更改主表中的值而导致子表中的记录孤立
--------学生信息表中的id变化了,学生成绩表中的id也要随着发生改变
3、子表存在与主表对应的记录,不能从主表中删除该行
--------不能把部门表中的数据删除
4、删除主表前,先删子表
--------先删除成绩表、后删除学生信息表
二、外键的使用
外键的使用需要满足下列的条件:
1、两张表必须都是InnoDB表,并且它们没有临时表。
2、建立外键关系的对应列必须具有相似的InnoDB内部数据类型。
3、建立外键关系的对应列必须建立了索引。
创建外键的两种方式:
方式一:在创建表的时候进行添加
方式二:表已经创建好了,继续修改表的结构来添加外键。
在创建表的时候添加外键:
表1:
create table stuInfo(
Scode int primary key, --学生的学号
Sname char(10), --学生的姓名
Saddress varchar(50), --学生的住址
Sgrade int, --学生所在班级
Semail varchar(50), --学生的邮箱地址
Sbrith date
)DEFAULT CHARSET='utf8';
表2:
create table score(
studentID int,
coureseID int,
score int,
scoreID int primary key,
foreign key(studentID) references stuInfo(Scode) --添加外键 )
DEFAULT charset='utf8';
建表以后添加外键:
语法:alter table 表名称 add foreign key (列名称) references
关联表名称(列名称);
例:
alter table stuInfo add foreign key (scode) references score(studentID);
三、删除外键
语法:alter table 表名称 drop foreign key 外键名称;
例:
alter table score drop foreign key score_ibQk_1;
注意:如果没有在建表的时候标明外键名称,
可以通过:
show create table 表名;
进行查看外键名称
以上是关于外键是唯一的吗?的主要内容,如果未能解决你的问题,请参考以下文章
外键为啥必须是唯一键?为啥至少唯一键才能作为其他表的外键?不唯一为啥不可以?
数据库中,主键是不能重复,唯一的,请问外键是否也不能重复的??