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

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

P32 32. 基础-约束-概述

讲义 4.1 约束概述 p61–62

按主题对应,非逐句切分

来源与核对说明

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

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

讲义索引:p61–62 · 4.1 约束概述 · 切点 notexact

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

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

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

约束这一章从“为什么需要规则”讲起,再列六类约束。

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

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

一句话理解

约束是写在表字段上的规则,用来挡住不该进库的数据;它由数据库替你检查。

按这 4 步做

  1. 先分清目的:约束保证数据的正确、有效、完整,而不是替业务做全部判断。
  2. 记六类:非空 NOT NULL、唯一 UNIQUE、主键 PRIMARY KEY、默认 DEFAULT、检查 CHECK、外键 FOREIGN KEY。
  3. 决定写在哪:建表时直接写在字段后面,或建表后用 ALTER TABLE 补上。
  4. 检查版本:CHECK 从 8.0.16 起才真正生效,更早版本会解析但忽略。

小例

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

SQL 示例
CREATE TABLE practice_score (
  id    INT PRIMARY KEY AUTO_INCREMENT,
  name  VARCHAR(10) NOT NULL UNIQUE,
  score INT CHECK (score >= 0 AND score <= 100),
  level CHAR(1) DEFAULT 'C'
) ENGINE = InnoDB;

【原创演示】这是本笔记的原创建表演示,不依赖任何已有表,表名也与视频里的 user 表不同。四列各带一种约束:id 用主键 + 自增,name 非空且唯一,score 用 CHECK 限定 0–100,level 缺省为 'C'。本页原创例已在隔离的 MySQL 8.0.46 测试实例执行通过;你也可以用 p32.sql 在本地练习库跑一遍。

易错点

30 秒速记

六类约束;目的是数据正确 / 有效 / 完整;可建表时写也可 ALTER 补;CHECK 需 8.0.16+。

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

自测 1:约束能不能替代业务层的全部校验?

不能。约束擅长单表单行、可声明的规则;涉及流程、跨表组合、外部系统的规则无法用约束表达,仍要应用逻辑。

自测 2:为什么示例里显式写 ENGINE=InnoDB?

外键等特性依赖支持它的存储引擎,InnoDB 是 MySQL 8.0 默认且支持外键;写清楚可以避免换引擎后约束失效。

材料与来源

展开材料出处、讲义页码与证据等级
材料类型 / 位置支持了什么
P32 原视频页(BV1Kr4y1i7ru)平台视频页 · P32;采样静帧 t012/t20/t30/t40/t50/t60/t70/t80/tendt30 为“概述”页:概念、目的、六类约束表。
MySQL 8.0 Reference:CREATE TABLE官方文档核对约束写法与 CHECK 的版本要求,未逐字引用。

按 t30 帧核对:概述页写明“约束是作用于表中字段上的规则,用于限制存储在表中的数据”“目的:保证数据库中数据的正确、有效性和完整性”,并列出六类约束表格,其中 CHECK 标注“8.0.16版本之后”。t012 帧的目录里出现“事务”一词,属课程目录,不作为本集讲解内容。正文示例表为原创,未使用视频里的 user 表;无字幕。

讲义对照:讲义 4.1 约束概述 · p61–62(公开镜像;按主题对应,切点 notexact)

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

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

下载本集 Markdown