我是小白,刚接触MySQL不久,现阶段正在学习,为此在CSDN上留下自己的学习笔记。如果有错误的地方还请大家见谅,评论或者私发我错误地方哦,谢谢大家,嘿嘿~
此篇将记录外键的相关知识,上篇内容为对一张表的约束条件(传送门:创建表的完整性语法)
外键(foreign key):百度百科
引言:
要使两张表形成关联,外键只能引用外表中的列的值或使用空值。可以保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。
如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的相关联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。
对上表进行关联
foreign key注意:
1、被关联的字段必须是一个key,通常是id字段
2、创建表时:必须先建立被关联的表,才能建立关联表
建立部门表:
create table dep(
id int primary key auto_increment,
dep_name varchar(20),
dep_info varchar(20)
);
建立员工表:
create table emp(
id int primary key auto_increment,
name varchar(20),
age int,
dep_id int,
constraint fk_emp_dep
foreign key(dep_id) references dep(id)
);
运行截图
语法
constraint 外键名字 foreign key(当前表需要关联的id:此处为dep_id) references 被关联的表名:此处为dep(被关联表的id,此处为id)
注:
1.constraint 外键名字:也可以不写,外键名字自己取,此处取为fk_emp_dep
2."constraint fk_emp_dep
foreign key(dep_id) references dep(id)"
可以写在一行,constraint fk_emp_dep foreign key(dep_id) references dep(id),这里为了美观写为了两行。
插入部门值:
insert into dep(dep_name,dep_info) values
('python','python_course'),
('mysql','mysql_course'),
('math','math_course');
插入员工值:
insert into emp(name,age,dep_id) values
('江',21,1),
('顾',18,2),
('盛',17,3),
('停',35,1),
('方',36,3);
运行截图
查询:select * from emp,dep where emp.dep_id = dep.id order by emp.id asc;
运行截图
注:
1.where emp.dep_id = dep.id:使员工表的dep_id与被关联表部门表的dep.id相对应。
2.order by emp.id asc:按正序排列显示。
1.删除外键
一般不用删除外键,外键是考虑好之后建立的,如果一定要删除的话,语句为:
alter table 表名 drop foreign key 外键名字;
此处不进行演示,感兴趣的话可以私下验证。
2.删除表
要先删除关联表再删除被关联表。
drop table emp;
drop table dep;
运行截图
3.删除记录
要删除部门表里面的一个id需要先把它被关联的字段删除
delete from emp where dep_id =2;
delete from dep where id =2;
运行截图
如果要更新或删除同步,员工表设置成更新删除同步需要加 on update cascade on delete cascade
重新建立表,插入值
建立员工表:
create table emp(
-> id int primary key auto_increment,
-> name varchar(20),
-> age int,
-> dep_id int,
-> foreign key(dep_id) references dep(id)
-> on update cascade on delete cascade
-> );
运行截图
此篇为外键之多对一。
如果您感觉有用的话,请点赞评论收藏哦,非常感谢,好人一生平安!!
祝大家天天开心❀❀❀❀❀❀*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。