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

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

P34 34. 基础-约束-外键约束

讲义 4.3.1 外键介绍 / 4.3.2 外键语法 p64–66

按主题对应,非逐句切分

来源与核对说明

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

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

讲义索引:p64–66 · 4.3.1 外键介绍 / 4.3.2 外键语法 · 切点 notexact

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

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

看视频,对照阅读:在新标签打开原视频(p=34) · 先看跟播对照

外键是约束里最需要理解关系的一个:子表引用父表的唯一值。

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

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

一句话理解

外键让子表的一列只能取父表里真实存在的值,从而不让“孤儿数据”进库。

跟播:视频里 ↔ 本站

视频里 / 原课字段本站对应
讲义 dept:1 研发部、2 市场部(p65 原名)本页练习表同样用 1 研发部、2 市场部(沿用讲义原名)
讲义 emp 6 行、含 job / entrydate本站 employee 4 行、5 列(没有 job / entrydate)

P37 起换成本站另一套 6 列小表(2 号部门叫测试部),那是那一页的练习数据,不是这里写错。

按这 4 步做

  1. 确定方向:employee.dept_id 指向 department.id,employee 是子表,department 是父表。没有外键时直接删父表一行,子表会留下指向不存在部门的孤儿数据,而且不报错——外键就是用来挡这个的。
  2. 确认父表被引用的列有唯一索引(通常是主键),两边数据类型一致。
  3. 建表时写 FOREIGN KEY (dept_id) REFERENCES department(id),或建表后用 ALTER TABLE 补。
  4. 插入一个父表不存在的 dept_id,确认被拒绝(错误 1452)。

小例

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

SQL 示例
ALTER TABLE employee
  ADD CONSTRAINT fk_employee_department
  FOREIGN KEY (dept_id) REFERENCES department (id);

【原创演示】依赖两张练习表:department(id,name) 有 (1,'研发部')、(2,'市场部');employee 就是前面那四行。加约束后,小林、小周、小陈的 dept_id 都能在父表找到;小李的 dept_id 是 NULL,外键不检查 NULL,所以也能留下。再插 dept_id=99 会报 1452 无法添加或更新子行。本页原创例已在隔离的 MySQL 8.0.46 测试实例执行通过(含被 1452 拒绝的那次插入);也可以用 p34.sql 复现。

易错点

30 秒速记

子表引用父表唯一列;类型要一致;可建表时写也可 ALTER 补;NULL 不检查;违反报 1452。

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

自测 1:为什么 department.id 必须是主键或唯一索引?

外键要确认子表的值能唯一对应父表的一行;父表被引用列不唯一时无法判断指向哪条记录,数据库会直接拒绝建约束。

自测 2:小李 dept_id 为 NULL,加外键后会被删掉吗?

不会。外键只校验非 NULL 的引用值,NULL 表示“没有引用”,可以存在于子表。

材料与来源

展开材料出处、讲义页码与证据等级
材料类型 / 位置支持了什么
P34 原视频页(BV1Kr4y1i7ru)平台视频页 · P34;采样静帧 t012/t20/t30/t40/t50/t60/t70/t80/tendt012/t020 为外键概念页与 emp/dept 示意图。
MySQL 8.0 Reference:FOREIGN KEY 约束官方文档核对父表唯一索引与 1452/1822 的触发条件,未逐字引用。

按 t012/t020 帧核对:外键页给出概念“外键用来让两张表的数据之间建立连接,从而保证数据的一致性和完整性”,并用 emp(子表,dept_id)与 dept(父表,id)示意,页面明确注明“两张表在数据库层面并未建立外键关联”。正文沿用这个父子关系,但使用自己的练习表与数据,未声称与课堂 emp 表一致;无字幕。

讲义对照:讲义 4.3.1 外键介绍 / 4.3.2 外键语法 · p64–66(公开镜像;按主题对应,切点 notexact)

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

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

下载本集 Markdown