把课件第 14 页那张供应商表原样建出来
四列,类型和长度都照表 14-1 抄,一个字不改。
重 点
上一章只说这张表有四列,这一章多说了两件事:什么类型、多长。
关键术语这一章在定什么
想一想
同一组关系模式,能落成不同的表吗?
四列,类型和长度都照表 14-1 抄,一个字不改。
上一章只说这张表有四列,这一章多说了两件事:什么类型、多长。
同一组关系模式,能落成不同的表吗?
char(5) 是五个字符,第六个字符没地方放。
第一条报 1406,长度是硬的。第二条固话带区号刚好 12 位,也满了。
五格的信箱牌子,写六个字就是写不下,跟愿不愿意没关系。
供应商超过一千家的那天怎么办?
手机号看着是数字,其实不是数。
INT 最大 2147483647,十一位手机号撞 1264。开头那个 0 也被吃掉了。
| 东西 | 该用 |
|---|---|
| 手机号 | CHAR |
| 身份证号 | CHAR |
| 库存量 | INT |
| 销售数量 | INT |
编号从来不做算术,用它的只有相等比较。整数还会把 013800 这种前导零吃掉。
同样两个数,一列用 FLOAT,一列用 DECIMAL,加起来看。
浮点那一列加出来是 0.30000000447034836,不是 0.3。
FLOAT 只有四个字节,能记的有效数字大约七位,0.1 本来就存不准。
一分钱的误差,一天一百万笔单会差多少?
课件写的范围是 -9999999.99 到 9999999.99,自己验一遍。
9999999.99 进得去,再多一分就撞 1264,课件那句话是对的。
9999999.994 为什么也进得去?
同一批日期,一列用 VARCHAR 一列用 DATE,各排一次。
字符串把十月排到了九月前面,DATE 排对了,还替你把 13 月挡回来。
DATE 存进去会补成 2026-09-01,字符串存的还是你敲的那几个字。
第六位一个是 1 一个是 9,比到这一位就分出高下了,后面不看了。
把刚才踩过的坑合成一张对照表,最后数一数。
四列四个决定,每一个决定错了,都会在装数据那一刻现形。
还有哪一列的类型值得再想想?
头一句先删干净,从零建两张表,把四个坑挨个走一遍。
1406 装不下、1264 超范围、浮点加不准、1292 日期不合法,四道门。
这四条报错都是真机的原话,自己在 MySQL 上敲一遍是一模一样的。
这四道门有没有哪一道是设计时想不到的?