如图两张表一张是员工表,一张是部门表,现在通过员工表的dept_id字段与部门表的id字段形成关联,从而保证数据的一致性和完整性
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名)
REFERENCES 主表 (主表列名) ;
为emp表的dept_id字段添加外键约束,关联dept表的主键id。
alter table emp add constraint emp_dept_id
foreign key (dept_id) references dept(id);
在上述的语句中的外键名称是由你自己取名,但是在这里取的字段名,在后面如果要进行外键删除时需要进行相同名称的使用,如:
alter table emp drop foreign key emp_dept_id;
在上方我取的外键名为emp_dept_id,则删除时需要使用相同的字段名;
当添加完外键之后,进行部门表的删除时,如果员工表使用了该数据,则无法删除,如:
此时就保证了数据的一致性和完整性。
添加了外键之后,再删除父表数据时产生的约束行为,我们就称为删除/更新行为。具体的删除/更新行
为有以下几种:
由于NO ACTION 是默认行为,我们前面其实就是使用的默认行为,就是不允许删除
还有两种分别是同样删除子表中对应数据和将子表中对应字段置空为null
- CASCADE
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references
dept(id) on update cascade on delete cascade ;
- SET NULL
alter table emp add constraint fk_emp_dept_id foreign key (dept_id) references
dept(id) on update set null on delete set null ;
他们都同样能够达到保持数据一致性的要求,具体使用哪种看具体需求