MySQL 视频课 · 50 集 / 约束:概述、演示、外键与更新删除行为 / P35

第 35 集 / 共 50 · 约束:概述、演示、外键与更新删除行为 · 视频 p=35 · 时长 8:58

P35 35. 基础-约束-外键删除更新行为

讲义 4.3.3 删除/更新行为 p67–68

按主题对应,非逐句切分

来源与核对说明

以同版讲义的公开镜像核对章节与页码(镜像非官方出品);非逐字稿,示例为原创补充。

本页是学习笔记,不等同于视频逐字稿。原声字幕未取得(匿名接口字幕轨为空且需登录,未使用任何账号),也没有逐句讲解记录;讲义只按节与页码对应,切点未逐句确证。

讲义索引:p67–68 · 4.3.3 删除/更新行为 · 切点 notexact

讲义是第三方公开镜像(95 页 PDF),不是官方原件;这里只用它核对章节顺序与页码,不转载正文。

完整来源说明与变更记录 →

看视频,对照阅读:在新标签打开原视频(p=35)

父表被删被改时子表如何反应,由删除/更新行为决定。

复习模式:快速跳知识点(详解在下方各节)

复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。

一句话理解

父表记录被删或被改时子表怎么办,由 ON DELETE / ON UPDATE 后面的行为决定。

按这 4 步做

  1. RESTRICT / NO ACTION:子表还有引用就拒绝删除或修改,这是默认的保守选择。
  2. CASCADE:父表删一行,子表对应的行一起删;父表改主键,子表跟着改。
  3. SET NULL:父表删一行,子表外键列置空,前提是该列允许 NULL。
  4. SET DEFAULT:设计上置默认值,但 InnoDB 不支持,别在 MySQL 里指望它。

小例

先准备本集练习数据:p35.sql · 练习库说明

SQL 示例
ALTER TABLE employee
  ADD CONSTRAINT fk_employee_department
  FOREIGN KEY (dept_id) REFERENCES department (id)
  ON DELETE SET NULL
  ON UPDATE CASCADE;

【原创演示】仍是那两张练习表。设成 SET NULL 后删掉部门 2,小陈这一行的 dept_id 会变成 NULL,人还留在表里;如果改成 ON DELETE CASCADE,删部门 2 会连小陈一起删掉,这就是风险点。dept_id 必须可为空,否则 SET NULL 在删除时会报错。本页原创例已在隔离的 MySQL 8.0.46 测试实例执行通过;也可以用 p35.sql 复现。

易错点

30 秒速记

RESTRICT/NO ACTION 拒绝、CASCADE 连动、SET NULL 置空(列须可空)、SET DEFAULT InnoDB 不支持。

自测(2 题,先答再展开)

自测 1:SET NULL 和 CASCADE 在“删部门”时分别发生什么?

SET NULL 只把子表外键置空、员工行保留;CASCADE 会把引用该部门的员工行一起删掉,数据直接消失。

自测 2:为什么 RESTRICT 常被当作默认推荐?

它让删除在存在引用时失败,迫使你先处理子数据,避免一次误删扩散到多张表。

材料与来源

展开材料出处、讲义页码与证据等级
材料类型 / 位置支持了什么
P35 原视频页(BV1Kr4y1i7ru)平台视频页 · P35;采样静帧 t012/t20/t30/t40/t50/t60/t70/t80/tendt020–t040 为“外键约束 删除/更新行为”表格页。
MySQL 8.0 Reference:FOREIGN KEY 约束的参照操作官方文档核对 CASCADE/SET NULL/RESTRICT 与 InnoDB 对 SET DEFAULT 的支持情况,未逐字引用。

按 t020/t030/t040/t070 帧核对:画面为“外键约束 删除/更新行为”表格,列出 NO ACTION(与 RESTRICT 一致)、RESTRICT、CASCADE、SET NULL(要求外键允许取 null)、SET DEFAULT(Innodb 不支持)。正文示例 DDL 为原创且未执行;无字幕,讲师现场演示未核实。

讲义对照:讲义 4.3.3 删除/更新行为 · p67–68(公开镜像;按主题对应,切点 notexact)

  • 画面静帧 9 帧,采样点 0:12–8:45 / 全片 8:58(只用于确认画面主题,不作内容边界)
  • 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号

等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。

下载本集 Markdown