数据库原理与应用 第 14 章 · 上机一
课程第 14 章上机一 先建好装不下用错型钱的事验一句排错序再看一眼走一遍 版式
第 14 章 数据库物理结构设计、实施和运行维护 · 上机一

类型和长度,定的是能装下什么

上一章只说这张表有哪几列,这一章要说每一列多长。长度定错了,数据会告诉你。
已完成 0 / 7
本 次 上 机 题 目
  1. 01把课件第 14 页那张供应商表原样建出来
  2. 02编号多写一位会怎么样
  3. 03手机号写进整数列
  4. 04金额用浮点数会差多少
  5. 05课件说 decimal(9,2) 能存到哪儿
  6. 06日期用字符串存,排出来是乱的
  7. 07同一张表,两种设计并排
  8. 四种错误类型一口气撞完
01
第 14 章 · 上机一

把课件第 14 页那张供应商表原样建出来

四列,类型和长度都照表 14-1 抄,一个字不改。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开是一个空的 shop 库,这一章要照课件那十张表的结构自己建出来。
mysql>

重 点

上一章只说这张表有四列,这一章多说了两件事:什么类型、多长。

关键术语这一章在定什么

物理结构设计physical design
给每一列定类型、长度和索引

想一想

同一组关系模式,能落成不同的表吗?

02
第 14 章 · 上机一

编号多写一位会怎么样

char(5) 是五个字符,第六个字符没地方放。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开是一个空的 shop 库,这一章要照课件那十张表的结构自己建出来。
mysql>

重 点

第一条报 1406,长度是硬的。第二条固话带区号刚好 12 位,也满了。

打个比方

五格的信箱牌子,写六个字就是写不下,跟愿不愿意没关系。

想一想

供应商超过一千家的那天怎么办?

03
第 14 章 · 上机一

手机号写进整数列

手机号看着是数字,其实不是数。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开是一个空的 shop 库,这一章要照课件那十张表的结构自己建出来。
mysql>

重 点

INT 最大 2147483647,十一位手机号撞 1264。开头那个 0 也被吃掉了。

分清楚看着像数字的

东西该用
手机号CHAR
身份证号CHAR
库存量INT
销售数量INT

练一练

编号类的东西为什么不用整数存?
  1. A整数占空间大
  2. B不参与加减,开头的 0 还会丢
  3. C整数不能做主码
  4. DMySQL 不许
答案 B

编号从来不做算术,用它的只有相等比较。整数还会把 013800 这种前导零吃掉。

04
第 14 章 · 上机一

金额用浮点数会差多少

同样两个数,一列用 FLOAT,一列用 DECIMAL,加起来看。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开是一个空的 shop 库,这一章要照课件那十张表的结构自己建出来。
mysql>

重 点

浮点那一列加出来是 0.30000000447034836,不是 0.3。

知道更多

FLOAT 只有四个字节,能记的有效数字大约七位,0.1 本来就存不准。

想一想

一分钱的误差,一天一百万笔单会差多少?

05
第 14 章 · 上机一

课件说 decimal(9,2) 能存到哪儿

课件写的范围是 -9999999.99 到 9999999.99,自己验一遍。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开是一个空的 shop 库,这一章要照课件那十张表的结构自己建出来。
mysql>

重 点

9999999.99 进得去,再多一分就撞 1264,课件那句话是对的。

记牢它怎么算范围

  1. 前一个数是总位数
  2. 后一个数是小数位
  3. 整数位是两数相减

想一想

9999999.994 为什么也进得去?

06
第 14 章 · 上机一

日期用字符串存,排出来是乱的

同一批日期,一列用 VARCHAR 一列用 DATE,各排一次。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开是一个空的 shop 库,这一章要照课件那十张表的结构自己建出来。
mysql>

重 点

字符串把十月排到了九月前面,DATE 排对了,还替你把 13 月挡回来。

知道更多

DATE 存进去会补成 2026-09-01,字符串存的还是你敲的那几个字。

练一练

为什么字符串排序会把 2026-10-1 排在 2026-9-1 前面?
  1. A字符串按长度排
  2. B逐位比字符,1 比 9 小
  3. CMySQL 的排序有问题
  4. D少了前导零就不能排
答案 B

第六位一个是 1 一个是 9,比到这一位就分出高下了,后面不看了。

07
第 14 章 · 上机一

同一张表,两种设计并排

把刚才踩过的坑合成一张对照表,最后数一数。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开是一个空的 shop 库,这一章要照课件那十张表的结构自己建出来。
mysql>

重 点

四列四个决定,每一个决定错了,都会在装数据那一刻现形。

记牢它四条口诀

  1. 长度定用 CHAR
  2. 长度变用 VARCHAR
  3. 钱用 DECIMAL
  4. 日期用 DATE

想一想

还有哪一列的类型值得再想想?

第 14 章 · 上机一

四种错误类型一口气撞完

头一句先删干净,从零建两张表,把四个坑挨个走一遍。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开是一个空的 shop 库,这一章要照课件那十张表的结构自己建出来。
mysql>

重 点

1406 装不下、1264 超范围、浮点加不准、1292 日期不合法,四道门。

知道更多

这四条报错都是真机的原话,自己在 MySQL 上敲一遍是一模一样的。

想一想

这四道门有没有哪一道是设计时想不到的?

保山学院·人工智能教研室·曹鼎鼎