前言
今天小编在这里分享的内容是外键,不知道大家在学mysql的时候
有没有被外键折磨,当时用着终端,大写的外键字母看着发昏,又多又麻烦,希望
今天的文章对大家有帮助
外键(foreign key)
定义:让当前表字段的值在另一个表的范围内进行选择
就看定义的话,我自己都看晕了,这里给大家举个例子帮大家理解吧
表1:报名表(id,name,money) 表2:班级表(id name)
解析:只有报名成功交了钱的人,也就是那个id才能出现在班级表内,这里班级表就是从表,报名表就是主表
而报名表的id就是主键,而班级表的id就是关联主见的外键
- 提醒
foreign key 刚学时最好就是可先小写,帮助理解其定义,还有上面的解析小伙伴可以放到实际案例上理解
语法
foreign key(参考字段名)
references 主表(被参考字段名)
on delete 级联动作
on update 级联动作
# 注意:这里是一气合成的,没有逗号
# 比如(创建表时):
create table slave(
stu_id int,
name varchar(20),
money decimal(6,2),
foreign key(stu_id) references master(id) on delete cascade on update cascade
)charset=utf8;
# 已有表时:
alter table 表名 add foreign key(参考字段) references 主表(被参考字段) on delete 级联动作 on update 级联动作
/*
后面两个级联动作,实际也是我最近才了解,如果没学过的可以省略
但是前两者必须书写,如果英文好的小伙伴应该可以看得出来
外键(字段) 关联 主表(某个字段),当然这两个字段也不能乱选
mysql实际先用英语含义理解(刚开始小写更好认)能更快掌握
*/
- 使用规则
主表、从表字段数据类型要一致
主表被参考字段 :KEY的一种,一般为主键
- 重点介绍
show create table 表名;
作用:查看表的创建语句
原因:有些小伙伴实际很疑惑,为啥看着那么鸡肋呢,为什么不直接看上面呢,首先你要明白这个表
未必原创是你,而了解表结构最快的方式就是查看创建语句,也会有些小伙伴说为啥不用 desc 表 查看呢,
直接给大家看一下 show create table 表 的结果吧
CREATE TABLE `bank` (
`name` varchar(20) DEFAULT NULL,
`money` decimal(20,2) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
这里能看到,每个字段的数据类型,限制,编码,引擎等等,有的是mysql默认写的,所以不用担心平时要写那么复杂,而desc看的表结构信息有限,还有个致命的一点
无外键 无 desc查看
有外键 MUL desc查看的
外键删除 MUL desc还是这个结果
普通(MUL)定义: 唯一(UNI,字段值不能重复,可为NULL)
案例操作
- 数据准备
表一:缴费信息表(主表)
id 姓名 班级 缴费金额
1 唐伯虎 AID19 300
2 点秋香 AID19 300
3 祝枝山 AID19 300
表二:学生信息表 -- 做外键关联
stu_id 姓名 缴费金额
1 唐伯虎 300
2 点秋香 300
3 祝枝山 300
这两表小伙伴一定要动手,帮助理解上面的内容
表1:
create database db2 charset utf8;
use db2;
create table master(
id int primary key,
name varchar(20),
class char(5),
money decimal(6,2)
)charset=utf8;
insert into master values(1, '唐伯虎', 'AID19', 300),(2, '点秋香','AID19',300),(3,'祝枝山', 'AID19', 300);
表2:
create table slave(
stu_id int,
name varchar(20),
money decimal(6,2),
foreign key(stu_id) references master(id) # 位置在这
)charset=utf8;
insert into slave values(1, '唐伯虎', 300),(2, '点秋香',300),(3,'祝枝山', 300);
扩展
大家删表的时候,有没有发现只要是关联后,主表实际删除不了了,必须要先删除从表。实际就和
on delete 级联动作 on update 级联动作 有关
- 级联动作
cascade
数据级联删除、更新(参考字段) ,主表数据删了,从表的也删了
restrict(默认)
从表有相关联记录,不允许主表操作
set null
主表删除、更新,从表相关联记录字段值为NULL
语意上应该挺清楚的,小伙伴们可以测试一下。
结语
小编到这了,案例代码建议大家都敲一遍,这里实际上希望大家使用终端敲,因为编辑器太智能了,初学者
最好用终端敲,一个一个的敲出来,刚敲的时候建议就用小写,便于理解,方便记忆,也能运行,
以后大写可以交给编辑器,减少时间成本,但小白还是老老实实的敲吧。