MySQL-外键约束
# 外键
# 一.概述
外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。 数据库表结构参照《多表查询-外连接-自连接》文档中的emp和dept表
如何理解上面的概念呢?如下图有两张表,员工表和部门表:
员工表中的dep_id字段是部门表的id字段关联,也就是说id为1的孙悟空属于1号部门研发部的员工。现在我要删除1号部门,就会出现错误的数据(员工表中属于1号部门的数据)。而我们上面说的两张表的关系只是我们认为它们有关系,此时需要通过外键让这两张表产生数据库层面的关系,这样你要删除部门表中的1号部门的数据将无法删除。
# ###二 .语法
添加外键约束语法 ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCES 主表名称(主表列名称);
此时没有外键,两个表只有逻辑上的关系,并没有真正意义上的关系。
添加外键:
alter table emp add CONSTRAINT fk_emp_dept FOREIGN key(dep_id) REFERENCES dept(did);
外键添加成功,可以在navicat中查看两个表的关联关系。
# 三.示例
1.需求删除dept表中研发部.
delete from dept where dname ='研发部' ;
执行结果:
此时删除研发部这条数据,会发现无法删除(外键生效)。
解决思路:先删除表的关联关系(外键),再删除dept表的研发部门。
语法:
删除外键 alter table emp drop FOREIGN key fk_emp_dept;
执行结果:
查看模型图:
此时执行删除操作:
delete from dept where dname ='研发部';
执行结果:
select * from dept;
执行结果:
此时研发部门成功在dept表中删除。