MySQL 视频课 · 50 集 / DDL:数据库与表操作、数据类型、图形化工具 / P08
第 08 集 / 共 50 · DDL:数据库与表操作、数据类型、图形化工具 · 视频 p=8 · 时长 20:44
P08 08. 基础-SQL-DDL-数据类型及案例
看视频,对照阅读:在新标签打开原视频(p=8)
类型选错,后面插入和查询都会别扭。跟着员工表案例走一遍最直观。
复习模式:快速跳知识点(详解在下方各节)
复习顺序:先看“一句话理解”能否复述,再扫步骤,最后做自测;答不出时回到小例与易错。
一句话理解
建表时要给每个字段挑类型:挑小了存不下,挑大了浪费。这一集过一遍数值、字符串、日期三类常用类型,再用员工表案例练手。
按这 4 步做
- 数值类型按范围从小到大:TINYINT(1 字节)、SMALLINT、MEDIUMINT、INT(4 字节)、BIGINT(8 字节),还有 FLOAT、DOUBLE 和精确小数 DECIMAL。年龄用 TINYINT UNSIGNED 就够,还顺便挡掉负数。
- 字符串用 CHAR(n) 定长、VARCHAR(n) 变长。姓名、工号这类短文本用 VARCHAR,长度按业务上限给,不是越大越好。
- 日期时间:DATE 只要年月日、TIME 只要时分秒、DATETIME 存年月日+时分秒(范围到 9999 年)、YEAR 只存年份、TIMESTAMP 也存日期+时间但只占 4 字节、范围到 2038-01-19。入职时间只要日期就用 DATE;要存「某时刻」用 DATETIME;2038 年以后的时间(比如长期合同到期日)不能用 TIMESTAMP。
- 案例需求是“设计一张员工信息表”:编号纯数字、工号≤10 位、姓名≤10 位、性别一个汉字、年龄非负、身份证 18 位可能含 X、入职时间到日。逐条翻译成类型,就是下面这条建表语句。
小例
CREATE TEMPORARY TABLE emp_case (
id INT COMMENT '编号',
workno VARCHAR(10) COMMENT '工号',
name VARCHAR(10) COMMENT '姓名',
gender CHAR(1) COMMENT '性别',
age TINYINT UNSIGNED COMMENT '年龄',
idcard CHAR(18) COMMENT '身份证号',
entrydate DATE COMMENT '入职时间'
);
DESC emp_case;
七个字段对应七条需求:id 用 INT;workno、name 用 VARCHAR(10) 卡住 10 位;gender 用 CHAR(1) 正好一个汉字;age 用 TINYINT UNSIGNED 保证非负;idcard 用 CHAR(18),因为长度固定且末位可能是 X;entrydate 用 DATE。DESC 应返回 7 行,逐行看 Type 列就能对上设计。
下面每条只演示一个点,可以单独复制执行。
CREATE TABLE t_time (
d DATE,
dt DATETIME,
y YEAR,
ts TIMESTAMP
);
INSERT INTO t_time VALUES
('2026-10-22', '2026-10-22 08:30:00', 2026, '2026-10-22 08:30:00');
SELECT d, dt, y, ts FROM t_time;
一行结果:2026-10-22、2026-10-22 08:30:00、2026、2026-10-22 08:30:00。DATE 与 DATETIME 的区别就是「要不要时分秒」;YEAR 只能存年份;TIMESTAMP 范围到 2038 年,超出会报错,而 DATETIME 能存到 9999 年。这里只记用途和范围,不展开时区换算。
2026-10-22 | 2026-10-22 08:30:00 | 2026 | 2026-10-22 08:30:00
易错点
- 年龄用 INT:能存但占 4 字节,而 TINYINT UNSIGNED 还能顺便挡住负数。
- 身份证用 INT 或 VARCHAR 太短:18 位超出 INT 范围,末位 X 也不是数字,必须用字符型。
- 字符串长度按“现在够用”给。后面加长只能 ALTER,生产上改大表有成本。
30 秒速记
自测(2 题,先答再展开)
自测 1:身份证号为什么不能用 INT 存?
INT 只有 4 字节,放不下 18 位数字;而且二代身份证末位可能是字母 X,不是数值。CHAR(18) 定长、能存字母,才匹配这个字段。
自测 2:CHAR 和 VARCHAR 该怎么选?
长度基本固定的短字段(性别、身份证、国家代码)用 CHAR,省去长度前缀;长度差别大的(姓名、地址)用 VARCHAR,避免定长浪费。
材料与来源
展开材料出处、讲义页码与证据等级
| 材料 | 类型 / 位置 | 支持了什么 |
|---|---|---|
| B站原视频 P08《08. 基础-SQL-DDL-数据类型及案例》 | 平台视频页 · P8 | 标题、时长与分 P 信息取自平台公开页面;仅作外链,不在站内播放 |
| 本集采样画面 p08_t20.jpg(约 248s) | 平台视频页 · P8 / 约 248s | 已人工查看该帧:数据类型表格(MySQL数据类型.xlsx)的数值类型页:TINYINT/SMALLINT/MEDIUMINT/INT/BIGINT/FLOAT/DOUBLE/DECIMAL 及大小;只证明这一画面,不代表整集讲解 |
| 本集采样画面 p08_t80.jpg(约 994s) | 平台视频页 · P8 / 约 994s | 已人工查看该帧:幻灯片“案例—根据需求创建表(设计合理的数据类型、长度)”,列出员工表七条需求;右侧记事本写 create table emp;只证明这一画面,不代表整集讲解 |
| MySQL 8.0 Reference Manual: Data Types | 官方文档 | 语法条目备查,未逐字引用 |
讲义 p20–23「2.3.2.2 数据类型 / 2.3.2.3 案例」为主要依据:数值表、日期时间表(DATE/TIME/YEAR/DATETIME/TIMESTAMP,含 1/3/4/8 字节与范围)与员工表建表案例。原声字幕未取得(匿名接口字幕轨为空),讲师逐句讲解未核;正文示例为原创,四种类型的取值在 MySQL 8.0.46 实跑核对。
讲义对照:讲义 2.3.2.2 数据类型 / 2.3.2.3 表操作-案例 · p20–23(公开镜像;按主题对应,切点 notexact)
- 画面静帧 9 帧,采样点 0:12–20:31 / 全片 20:44(只用于确认画面主题,不作内容边界)
- 原声字幕未取得:匿名接口字幕轨为空且需登录,未使用任何账号
等级含义:平台视频页 / 官方文档 / 课件 = 原始材料;二手整理 = 参考;推断 = 未经核实。站内补充的解释与练习会在此说明。