Mysql数据库的外键(小白推荐)

前言

今天小编在这里分享的内容是外键,不知道大家在学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

语意上应该挺清楚的,小伙伴们可以测试一下。

结语

小编到这了,案例代码建议大家都敲一遍,这里实际上希望大家使用终端敲,因为编辑器太智能了,初学者
最好用终端敲,一个一个的敲出来,刚敲的时候建议就用小写,便于理解,方便记忆,也能运行,
以后大写可以交给编辑器,减少时间成本,但小白还是老老实实的敲吧。
  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值