所谓的数据类型,即是对数据进行统一的分类,从系统的角度出发,为了能够使用统一的方式进行管理,更好的利用有限的空间。
SQL中将数据大体分为三种类型:数值类型、时间日期类型和字符串类型。
1、整型
在SQL中要更多的节省磁盘空间,所以又将整型细分为了5个类型,分别如下:
- tinyint:使用1个字节存储,范围为-128~127
- smallint:使用2个字节存储,范围为-32768-32767
- mediumint:使用3个字节存储,范围为-8388608~8388607
- int:使用4个字节存储,范围为-2147483648~21474836647
- bigint:使用8个字节存储,范围为-9223372036854775808~-9223372036854775807
实例(创建一个整型表):
create table if not exists int_table(
num1 tinyint,
num2 smallint,
num3 unsigned mediumint,
num4 int,
num5 bigint
);
解析: SQL中的数据类型全部默认有符号,如果想要无符号数据,只需要在前面加入unsigned即可,如本例中num3的定义。
注: 在查看表的字段信息时,会发现每个类型后面都加了一个括号,括号里有数字,这个数字代表的是显式宽度,其意义是在当数据显示宽度不够时,通常需要搭配一个前导0来增加宽度,不改变值的大小;serofill(零填充)会导致数值自动变成无符号(此时会形成一个字符串0——数值),零填充的意义就在于保证数据格式。
零填充实例:alter table int_table add num6 smallint(8) serofill;
2、实型(小数)数据
SQL中将小数分为浮点型和定点型两种具体的小数类型,其特点如下:
- 浮点型:小数点浮动,精度有限,浮点型又可分为单精度浮点型和双精度浮点型,具体如下:
- float(单精度浮点型):占用4个字节,精度范围为7位左右;
- double(双精度浮点型):占用8个字节,精度范围为8位左右;
- 创建浮点数的方式:直接float或double表示没有小数部分(精度最少为整数部分);基本语法:
float(M,D); --M代表总长度,D代表小数部分的长度
。 - 实例
向其中插入数据,此时,由于num3的整数位应该只能有1位,因为其小数位为2位,而总长度为3位,所以整数位为1位,如下:
注: 浮点数一定会进行四舍五入(超出精度范围),浮点数如果是因为系统进位而导致整数部分超出指定的长度,那么系统也允许成立。
- 定点型:小数点固定,精度固定,不会丢失精度
- decimal(定点型):绝对的保证整数部分不会被四舍五入(不会丢失精度),小数部分则有可能丢失精度(理论上小数部分也不会丢失精度)。
- 创建定点数的实例:
create table de_table(id decimal(10,2));
- 插入数据时,定点数的整数部分一定不能超出长度,而小数部分则可以随意长度,因为系统会自动四舍五入;浮点数进位导致长度溢出可以,但是定点数不行。
注: 查看warnings(警告)的基本语法:show warnings;