知识库 知识库
首页
  • Hyperskill - Java

    • Java basic
    • Java OOP
    • 应知
    • 扩展
    • IO & Stream
    • Error & Exception
    • Algorithm & Data structure
    • Design pattern
    • Web
    • Spring boot
  • 练习题

    • 选择题 & 填空题
    • 代码题
  • Frank - Java与生活 (OOP)

    • 参考资料
    • Java基础
    • OOP上半部分
    • OOP下半部分
  • Frank - Java API进阶

    • Base API
    • Unit Test and main function
  • 学习笔记
  • 学习笔记

    • 数据库
  • Frank - MySQL删库跑路

    • 安装、连接、配置
    • 基本操作——数据库
    • 基本操作——表
    • 基本操作——数据
    • 数据类型
    • 列属性完整性
    • 数据库设计思维
    • 单表查询
    • 多表查询
  • 学习笔记

    • 其它
  • Frank - Linux现代方法

    • 必知
    • 命令
    • 技巧
  • 技术文档
  • Git
  • GitHub技巧
  • 前端
  • Khan Academy - 语法
  • Monthly
  • 阅读
  • Others
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 标签
  • 归档
GitHub (opens new window)

Jim FuckPPT

Java小学生
首页
  • Hyperskill - Java

    • Java basic
    • Java OOP
    • 应知
    • 扩展
    • IO & Stream
    • Error & Exception
    • Algorithm & Data structure
    • Design pattern
    • Web
    • Spring boot
  • 练习题

    • 选择题 & 填空题
    • 代码题
  • Frank - Java与生活 (OOP)

    • 参考资料
    • Java基础
    • OOP上半部分
    • OOP下半部分
  • Frank - Java API进阶

    • Base API
    • Unit Test and main function
  • 学习笔记
  • 学习笔记

    • 数据库
  • Frank - MySQL删库跑路

    • 安装、连接、配置
    • 基本操作——数据库
    • 基本操作——表
    • 基本操作——数据
    • 数据类型
    • 列属性完整性
    • 数据库设计思维
    • 单表查询
    • 多表查询
  • 学习笔记

    • 其它
  • Frank - Linux现代方法

    • 必知
    • 命令
    • 技巧
  • 技术文档
  • Git
  • GitHub技巧
  • 前端
  • Khan Academy - 语法
  • Monthly
  • 阅读
  • Others
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
收藏
  • 标签
  • 归档
GitHub (opens new window)
  • 学习笔记

  • Frank - MySQL删库跑路

    • 安装连接以及配置

    • 基本操作——数据库

    • 基本操作——表

    • 基本操作——数据

    • 数据类型

    • 列属性完整性

      • 列属性问题
      • 主键 primary key
      • 唯一键 unique key
      • 外键 foreign key
        • 作用
        • 要点
        • 外键的添加、查看、删除
          • 添加外键
          • 查看外键
          • 删除外键
      • 外键的三种操作
      • 外键的置空、级联操作
      • 数据库完整性
      • SQL内注释和代码注释
    • 数据库设计思维

    • 单表查询

    • 多表查询

  • MySQL
  • Frank - MySQL删库跑路
  • 列属性完整性
Jim
2022-04-15
目录

外键 foreign key

# 外键 foreign key

表和表之间一旦有了关联之后,就变得麻烦了。

# 作用

在表和表之间建立联系。

# 要点

  • 本表中的外键参照其他表中的主键
  • 外键的数据类型应该与所参照主键相同
  • 外键可能是可以重复的,此时它的Key为 MUI
  • 外键字段的值不应该是其他表主键字段没有的
  • 当其他表中主键字段的某个值被删掉、更新就会产生问题(涉及外键的三种操作)
  • 要销毁两张表时,应先销毁外键所在的表
  • 有并发操作的项目中一般都是禁止使用外键的(企业规范)
  • 删除外键需要使用外键别名

提示

MUI 表示该字段的值是可重复的。

# 外键的添加、查看、删除

# 添加外键

  • 创建表时添加外键(第二张表)

    1. 第一张表
    create table test_1(
    	stu_id int(4) primary key,	# test_1表的主键
        name varchar(30)
    	);
    
    1
    2
    3
    4
    1. 第二张表
    create table test_2(
        id int primary key,
        money decimal(10,4),
        stu_id int(4),
        foreign key(stu_id) references test_1(stu_id);	# 设置外键
    
    1
    2
    3
    4
    5

    其中

    foreign key(<FieldName1>) references <TableName>(<FieldName2>);
    
    1

    解释:

    • foreign key:我要设置一个外键
    • <FieldName1>:这个外键在本表中叫啥名
    • references:它来自哪儿
    • <TableName>(<FieldName2>):它来自<TableName>表中的<FieldName2>字段
  • 后期添加外键

    alter table <TableName> add foreign key(<FieldName1>) references <TableName>(<FieldName2>);
    
    1

    解释同上。

    提示

    还是那句话,后期改变结构的情况是少之又少的。数据库都是设计好了再用SQL语句来实现的,哪像初学者设计数据库一上来就是SQL语句一顿操作猛如虎啊。

# 查看外键

通过 show create table <TableName>; 来查看外键。

提示

外键创建后,并不会在表结构中明示出来。

外键别名

每创建一个外键,都会自动生成一个别名。

CONSTRAINT `eatery_ibfk_1` FOREIGN KEY(`stu_id`) REFERENCES `test_1` (`stu_id`);
1

eatery_ibfk_1 为外键 stu_id 的别名,一些操作要依赖于它,比如删除外键。

别名相关的内容,详见 MySQL别名 (opens new window)

# 删除外键

alter table <TableName> drop foreign key <外键别名>;
1

如要删除 test_2 这个表中的外键 stu_id,使用其别名 eatery_ibfk_1:

alter table test_2 drop foreign key eatery_ibfk_1;
1

注意

要删除外键必须使用外键别名,别名可通过show create table <FieldName>来查看。

编辑 (opens new window)
上次更新: 2022/09/26, 16:55:15
唯一键 unique key
外键的三种操作

← 唯一键 unique key 外键的三种操作→

最近更新
01
《挪威的森林》
04-14
02
青钢影
04-14
03
Processing strings
02-18
更多文章>
Theme by Vdoing | Copyright © 2022-2023 Jim Frank | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式