知识库 知识库
首页
  • 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-16
目录

外键的置空、级联操作

# 外键如何设定置空和级联操作?

置空和级联一般在创建表时进行设置。

# 关键字

在删除的时候:on delete

在更新的时候:on update

置空:set null

级联:cascade

# 创建主表

create table if not exists student(
	stu_id int primary key auto_increment comment 'student表主键stu_id',
	name varchar(30) comment '学生姓名name'
	);
1
2
3
4
  1. 插入数据到student表

    insert into student values
        (null, 'Jim'),
        (null, 'Tom'),
        (null, 'Anna'),
        (null, 'Emma');
    
    1
    2
    3
    4
    5
  2. 查询student表

    +--------+------+
    | stu_id | name |
    +--------+------+
    |      1 | Jim  |
    |      2 | Tom  |
    |      3 | Anna |
    |      4 | Emma |
    +--------+------+
    
    1
    2
    3
    4
    5
    6
    7
    8

# 创建子表

create table if not exists eatery_order(
	id int primary key auto_increment comment 'eatery_order主键',
	money decimal(10,4) default '0.0' comment '消费金额',
	stu_id int comment 'eatery_order表外键',
	foreign key (stu_id) references student(stu_id) on delete set null on update cascade
	);
1
2
3
4
5
6

# 关键语句

foreign key (stu_id) references student(stu_id) on delete set null on update cascade
1

解释:

  • on delete set null:在主表删除记录时,本表外键值置空 null
  • on update cascade:在主表更新记录时,本表外键值同步更新
  1. 插入数据到eatery_order表

    insert into eatery_order values
        (null, 7, 1),
        (null, 11, 3),
        (null, 11, 3),
        (null, 20, 4),
        (null, 7, 2),
        (null, 7, 4);
    
    1
    2
    3
    4
    5
    6
    7
  2. 查询eatery_order表

    +----+---------+--------+
    | id | money   | stu_id |
    +----+---------+--------+
    |  1 |  7.0000 |      1 |
    |  2 | 11.0000 |      3 |
    |  3 | 11.0000 |      3 |
    |  4 | 20.0000 |      4 |
    |  5 |  7.0000 |      2 |
    |  6 |  7.0000 |      4 |
    +----+---------+--------+
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

# 来感受置空和级联操作的魅力吧

# 置空

  1. 删除student表中的一些记录:

    delete from student where name='Emma';
    
    1
  2. 查询eatery_order表

    +----+---------+--------+
    | id | money   | stu_id |
    +----+---------+--------+
    |  1 |  7.0000 |      1 |
    |  2 | 11.0000 |      3 |
    |  3 | 11.0000 |      3 |
    |  4 | 20.0000 |   NULL |
    |  5 |  7.0000 |      2 |
    |  6 |  7.0000 |   NULL |
    +----+---------+--------+
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    可以看到在eatery_order表中,原本为4的stu_id,现在都变成了null。

# 级联

  1. 更新student表中的一些记录:

    update student set stu_id=456 where stu_id=3;
    
    1
  2. 查询eatery_order表

    +----+---------+--------+
    | id | money   | stu_id |
    +----+---------+--------+
    |  1 |  7.0000 |      1 |
    |  2 | 11.0000 |    456 |
    |  3 | 11.0000 |    456 |
    |  4 | 20.0000 |   NULL |
    |  5 |  7.0000 |      2 |
    |  6 |  7.0000 |   NULL |
    +----+---------+--------+
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    可以看到在eatery_order表中,原本为3的stu_id,现在都变成了456。

编辑 (opens new window)
上次更新: 2022/09/26, 16:55:15
外键的三种操作
数据库完整性

← 外键的三种操作 数据库完整性→

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