从图中看到,整数型又可以细分为这五种:tinyint、smallint、mediumint、int、bigint
为什么这样分?理由很简单。两个电影文件是一样的电影,一样的清晰度,一样的时间长度,但文件大小一个是1G(文件大小字节数),一个是2G。我们肯定会留着1G的那个,把2G的那个删掉,没有必要占着多余的硬盘空间,没有理由留着更占空间的电影文件反而删掉更节省空间的电影文件。
同样的道理,一样的数据,如果数据库字段数据类型设置合理,可能就会更节省空间(2G的数据可优化为1G),这样对数据操作本身就有好处,效率上更快。数据库数据大小的优化还是挺有必要的。
整数型就是按照所占字节数多少细分了这五类:
tinyint(1), smallint(2), mediumint(3),int(4), bigint(8)。括号中表示该类型所占空间的长度(字节数)
tinyint占一个字节,根据前面所学一个字节等于八位(bit),二进制从0000 0000 ~ 1111 1111可以表示十进制从0~255。如果最高位是符号位,二进制从0000 0000 ~ 1111 1111 可以表示十进制从 -128 ~ 127。
所以,MySQL一个字段设置为tinyint整数类型,那它在无符号下只能填写0——255之间的整数数字;它在有符号下只能填写-128——127之间的整数数字。
其他四种整数型同理,取值范围:
在设计数据库时,能精确知道某个字段的取值范围,可以选择对应的整数类型。
比如一个字段需要存人的年龄,人类的年龄取值范围也就是0——120多吧,年龄没有负数。用tinyint无符号类型设计这个字段最合适不过了,不会造成多余的空间浪费。
如果一个字段用来存会员的唯一ID号,一万个会员就会有一万个数字,显然用tinyint不行了。ID号数字如果超过了tinyint取值范围,是存不进去的。像这样的情况,只能选择表示更大数的smallint、mediumint、int。
注意:
前面在介绍PHP的整数型时,如果PHP是32位的,那它的整数型只能占四个字节,所以取值范围是-2147483647 ~ 2147483647。
因为楠神安装的都是64位mysql,以后32位会越来越少,所以楠神没有做过测试,不知在32位mysql下,bigint字段是否受mysql版本位数影响而创建不成功。总之,大家注意下这个地方。
学了整数型类型,我们去建一个只有整数型字段的表。
创建表的基本形式:
create table [if not exists] 表名(字段列表, [约束或索引列表]) [表选项列表];
说明:列表都是表示“多个”,相互之间用逗号分开。
字段基本形式: 字段名 类型 [字段修饰属性];
下面是一个在xh数据库里创建t1数据表的SQL语句,定义的全是整数型。
在cmd里直接写创建数据表的SQL语句不好写,通常我们需要先在记事本里写好SQL语句,再粘贴到cmd里就方便多了。
整数类型通用设定形式: 类型名[(长度n)] [unsigned] [zerofill]
长度n: 表示的意思是该数字的“显示形式上的长度”,默认情况下不需要我们写的。上面的SQL语句字段“f1”有长度设定,“f2”、“f3”都没有写长度设定。
unsigned:设定为“无符号”数,则此时不能存储负数,正数几乎加倍。
zerofill:填充0,是指如果一个数字的长度不够指定长度的时候,可以在左边填充0以补到该长度。
注意: 如果设置了zerofill,则自动也就表示同时具备了unsigned修饰的含义
楠神用Navicat插入一条数据:
字段f3并没有补0。
如果我用查询语句在cmd下显示:
字段f3是不是出现前面补0了。
因为补0仅影响显示,而显示仅在windows下通过cmd命令行使用mysql客户端工具才能够显示,linux下通过mysql客户端命令行下也可以显示,在navicat里好像不能显示。
另外说明:
1、表名和字段名都是被反引号(数字1左边那个反撇 ` )包起来的,不是单引号。反引号的作用是可以让MySQL使用关键字作为表名和字段名。
2、comment后面的内容可以当成MySQL的注释。
3、每个字段的定义最好都有 not null 语句。
4、AUTO_INCREMENT 和 PRIMARY KEY (`id`) 表示用来设置表的主键,后面还会做详细说明。
5、MySQL的SQL语句是不区分大小的。