外键是用于建立和加强两个表数据之间链接的一列或多列, 通过将保存表中主键值的一列或多列添加到另一个表中, 可创建两个表之间的链接, 这个列就成为第二个表的外键。 外键维系两个表的关系, 保持两个表数据的完整性, 一致性。如:
员工表
| 姓名 | 部门 |
|---|---|
| 张三 | 1 |
| 李四 | 2 |
部门表
| 部门号 | 部门名称 |
|---|---|
| 1 | 销售部 |
| 2 | IT部 |
员工表中部门字段就是外键, 对应部门表中的部门号主键
-- 员工表
create table staff (
sname varchar ( 10 ) not null,
deptid int(2)
);
-- 部门表
create table dept (
did int(2) primary key,
dname varchar(10) not null
)
-- 添加外键约束
alter table staff add constraint fk_did foreign key (deptid) references dept (did)
alter table staff add constraint fk_did foreign key (deptid) references dept (did) on update cascade on delete no action
| 策略 | 策略说明 | |
|---|---|---|
| CASCADE | 父表delete、update的时候,子表会delete、update掉关联记录 | |
| SET NULL | 父表delete、update的时候,子表会将关联记录的外键字段所在列设为null,所以注意在设计子表时外键不能设为not null | |
| RESTRICT | 如果想要删除父表的记录时,而在子表中有关联该父表的记录,则不允许删除父表中的记录 | |
| NO ACTION | 同 RESTRICT,也是首先先检查外键 |