mysql神功 2.1 数据类型的细分之整数类型
# 关于《mysql神功》的更新速度大家不要着急,我致力于打造一套"与众不同"的mysql,讲知识最大的忌讳就是同质化,讲的是否好不重要,重要的是与众不同。从《DAX神功》之后,我每套课程的风格都会在千变万化中进行。
MySQL数据类型包含:数值类型、日期和时间类型、字符串类型、二进制类型。也许二进制类型你不懂,那可能是你暂时用不到。但是 数值、日期和时间、字符串 这些类型你一定懂。
既然心里明白的事情还有什么可讲的呢?问题在于细分,以数值类型为例,它又分为:整数类型、浮点数类型、定点数类型。其中,整数类型又被细分为5种类型。
一、为什么数据类型要细分
先让我们来解决一道小学数学题,如题:某培训机构老板率38名讲师春游时坐船,每只大船可以做10个人,租金为90元,每只小船可以坐4人,租金40元。
规模较小的民营私企老板大多是精打细算的。老板对众讲师说:谁有租船良策?
某雷说:主公!末将有一良策。大船90元÷10人 = 9元/人, 小船40元÷4人= 10元/人, 大船所需银两甚少,我们做大船吧,90元 x 4只大船 = 360元
老板说:恩,不错,不错。众将士可有附议?
某球说:非也非也!主公且听我道来,我们已知大船比小船均价低,那我们的人应该优先做大船,多余的人再做小船,否则4条大船会浪费两个人的座位。总人数38人÷大船10人 = 3只大船还余8人,90元 x 3只大船 + 40元 x 2只小船 = 270 + 80 = 350元
老板说:妙哉!妙哉!球元帅智商超群呀,一下子省了10块钱。
这时在一旁的某哈按耐不住了,积极的想表现一下自己。
某哈说:主公,小的有一计,我们的讲师大多不识水性,不如这样,将3大1小四条船用锁链连接在一起,这样坐上去更稳当。
老板说沉思了一下说:恩,我看就你不识水性,且罢,你就留在岸上等我们吧。
说时迟,那时快,老板率领37名讲师登船。某哈望着远去的同僚,流下了追悔莫及的泪水。
现在你自己思考,你从这个故事中看懂了什么?如果你回答我:"曾经有4只船摆在某哈面前,但他没有珍惜。。。。" ,只能说你是"吃瓜群众"。
如果我是老板,我要招聘一名数据分析人员,来了两名应聘者,A和B,二人都可以胜任这项工作,但是B英语口语好,可是我的企业在这个岗位上不需要英语口语水平,A要求薪资8k,B要求薪资10k,如果一定要二选一,我会选择A,因为我不会为不需要的部分去买单。
数据库也是一样,比如单科成绩最多是150分、年龄大多120岁以内、身高大多在200cm以内,如果你将这些三位数与腾讯、阿里营收金额(可能是几亿、十几亿,甚至几十亿)使用同一类型,是不是一种浪费?就好比你上学,今天就带一个笔袋去考试,你手里拿着就好了。如果今天需要带很多书和练习册你就需要一个大书包,甚至是一个行李箱。
说了这么多,关于数据类型为什么要细分,明白了吗?你可能会说浪费就浪费呗,能差多少。14亿中国人,每人浪费一粒米,就是28吨。数据库小的时候不明显,数据量庞大以后......
二、数值类型
什么情况下用数值类型:能参与计算的数。学号、工号、身份证号...都不能参与计算,所以不需使用数值类型。
1、整数类型
图2-1,5个细分的整数类型就好比衣服尺码从小到大 S、M、L、XL、2XL

(1)名词解释
无符号与有符号:大于等于0的整数是【无符号】,例如,身高、体重、年龄等,我们就可以使用【无符号】,因为不会存在负数。【有符号】适用于销售数量、销售金额等,例如,你昨天卖了1台笔记本电脑,今天没有营业收入,但是顾客来店里将昨天购买的笔记本给退了。那今天的销售数量和销售金额就是负数。图2-2

(2)限定数据类型后,不允许你保存规则以外的数据
接下来我们做一个测试
① 打开 Navicat for MySQL,激活连接端口。图2-3

② 对着 localhost_3306 点鼠标右键,新建数据库。图2-4

③ 自定义数据库名称,点确定。图2-5

④ 双击小哈,激活数据库。图2-6

⑤ 在右侧找到新建表,图2-7

⑥ 定义字段名,定义数据类型,按需求判断是否勾选"无符号",图2-8

⑦ 在弹出的对话框中,写上这张表的名称,点确定。图2-9

⑧ 关闭表设计窗口。图2-10

⑨ 双击打开表。图2-11

⑩ 按Ctrl+N可以添加新记录,按下图所示输入三行记录。图2-12

⑪ 因为我们使用的数据类型是:数值类型 -> 整数类型 -> Tinyint + 无符号,所以数值范围是0~255。当你再次增加新记录或关闭保存表时(与第⑧步方法相同),因为256超过范围,所以会报错不让保存。弹出以下提示。图2-13

⑫ 于是,我们修改成下面的样子,关闭(自动保存)。图2-14

这里我们只是使用Tinyint做一个测试,其它类型可自行测试。最终我们懂了:不遵守规则,就不让保存。
每个字段,数字大小是不同的,你要根据业务需求来定义数据类型。
(3)长度
举个例子,月份 1、2、3…12,很多人想让它这样显示 01、02、03…12 。
① 单击选择小黑,点设计表。图2-15

② 填写长度为3,勾选填充零,最后点保存。图2-16

③ 现在关闭表,再打开小黑这张表,我们会发现,长度不足3位的都用0补齐了。图2-17

注意1:这里测试的长度是显示长度,对取值范围和占用空间没有影响。
# Tinyint+无符号 值范围0~255,不会因为你的长度设定修改值范围,更不会增加占用空间。
值范围由数据类型决定,如图2-1
注意2:如果没有勾选【填充零】,这时无论你长度改成几,它在保存后都会归零,等于没有设置长度。
友情提示:如果是月份或天,我们想让它显示两位数,长度应该写2
如果你不去填写长度,就是你看到默认的结果,例如:1、11、111

再给大家最后一个建议,能用整数尽量不用小数。我说的是尽量,你要动脑子,你的脑子不是用来死记硬背的,是灵活运用创造价值的,所以不要做出把平方米改成平方毫米这样的傻事。小学三年级就学了,什么情况下用什么单位。
我举个例子,如果身高1.85米,那你就写成185厘米,因为185可以保存成整数型TINYINT+无符号,占用1字节。当你使用小数保存时,占用字节一定比它大,不信,我们下节课见!