外键(foreign key)
一个表中的foreign key指向另一个表中的unique key(唯一约束的键)
对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表,外键所在的表就是从表(子表)。
外键约束
foreign key约束用于预防破坏表之间连接的行为,也能防止非法数据插入外键列,因为它必须是它指向的那个表中的值之一。【主要目的是确保表的数据的完整性,唯一性】
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或者多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。
定义外键时,需要遵守下列规则:
- 主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。
- 必须为主表定义主键。
- 主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。
- 在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。
- 外键中列的数目必须和主表的主键中列的数目相同。
- 外键中列的数据类型必须和主表主键中对应列的数据类型相同。
上段截取自http://c.biancheng.net/view/2441.html。
实例:
题目描述
在audit表上创建外键约束,其emp_no对应employees_test表的主键id。(以下2个表已经创建了)
1 2 3 4 5 6 7 8 9 10 11 12 |
|
方法一:创建表时添加外键约束。
drop table audit;
create table audit
(
emp_no int not null,
create_date datetime not null,
foreign key(emp_no)
references employees_test(id)
);
方法二:在修改表时添加外键约束,采用alter语句。
语句结构:
alter table table_nm add constraint constraint_name
foreign key table_a(col) references table_b(col);
alter table audit
add constraint
fk_emp_no
foreign key
audit(emp_no)
references
employees_test(id);
删除外键约束语法格式:
ALTER TABLE <表名> DROP FOREIGN KEY <外键约束名>;