数据库常用命令之外键(foreign key)之多对一(总结,基础)

我是小白,刚接触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
    -> );

运行截图

此篇为外键之多对一。

如果您感觉有用的话,请点赞评论收藏哦,非常感谢,好人一生平安!!

祝大家天天开心❀❀❀❀❀❀*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。

猜你喜欢

转载自blog.csdn.net/m0_50962679/article/details/123248281