2016.8.10
外键(Foreign Key)
外键又称作外关键字。
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。
以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。
如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键,则该属性集是关系模式R的外键。
保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。
使两张表形成关联,外键只能引用外表中的列的值或使用空值。
外键就是指这个键在外表中是主键 。
总结:
- 主键就是在本表是主键,外键就是在外表是主键。
- 主键表是被引用的表,外键表是引用其他表的表。
- 主键的取值规则:非空唯一
- 外键的取之规则:可为空也可不为空,可以重复,必须来源于参照主键。
- 一个字段只能被定义一个表级约束,要么实体完整性约束(主键),要么参照完整性约束(外键)。
- 一般情况下不存在两个表用同一个字段当主键。
- 一般来说,标准的关系模式定义下、两个表有两个相同字段、那么一个在这表当主键、必定在另一表当外键。
外键约束
如果表A的主关键字是表B中的字段,则该字段称为表B的外键,表A称为主表,表B称为从表。外键是用来实现参照完整性的。
比如说:
create table a(
id int not null,
name varchar(30),
primary key (id)
);
insert into a values (1, 'Group1');
insert into a values (2, 'Group2');
create table b(
id int not null,
name varchar(30),
a_id int,
primary key (id),
foreign key (a_id) references a(id)
);
insert into b values (1, 'qianxin', 1); --可以插入
insert into b values (2, 'yiyu', 2); --可以插入
insert into b values (3, 'dai', 3); --错误,无法插入,用户组3不存在,与参照完整性约束不符
使用原则
- 为关联字段创建外键。
- 所有的键都必须唯一。
- 避免使用复合键。
- 外键总是关联唯一的键字段。