所谓的数据类型:对数据进行统一的分类
从系统的角度出发为了能够使用统一的方式进行管理:更好的利用有限空间。
SQL中将数据类型分为三大类:
- 数值类型
- 字符串型
- 日期时间型
一、数值型
数值型数据:都是数值
系统将数值型分为整数型和小数型
1、整数型
整数型:存放整型数据
在SQL中因为更多要考虑如何节省磁盘空间,所以系统将整型又细分了5类
类型 | 名称 | 最大值 | 字节 |
---|---|---|---|
Tinyint | 迷你整型 | 255 | 1 |
Smallint | 小整型 | 65536 | 2 |
Mediumint | 中整型 | …… | 3 |
Int | 标准整型 | …… | 4 |
Bigint | 大整型 | …… | 8 |
①创建一张整型表
create table my_int(
int_1 tinyint,
int_2 samllint,
int_3 int,
int_4 bigint
)charset utf8;

②插入数据:只能插入整型,只能插入范围内的整型
insert into my_int values (100,100,100,100);

SQL中所有数值类型都是默认有符号的:分正负
所以,有时候需要使用无符号数据,就需要
给数据类型限定:int unsigned;
③给表增加一个无符号类型
alter table my_int add int_5 tinyint unsigned;

④有符号和无符号的区别
插入数据:


⑤类型后自带的显示宽度

显示宽度不控制大小
显示宽度的意义:当数据不够显示宽度时,会自动让数据变成对应的显示宽度。通常需要搭配一个前导0来增加宽度,不改变值大小:zerofill(零填充)。零填充会导致数值会自动变成无符号的。

⑥零填充+显示宽度的效果:

2、小数型
小数型:带有小数点或者范围超出整型的数值类型
SQL中又将小数型分为:浮点型和定点型
浮点型:小数浮动,精度有限,而且会丢失精度
定点型:小数点固定,精度固定,不会丢失精度
①浮点型:也称精度型数据,超出范围会丢失精度(四舍五入)
分为两种精度
类型 | 名称 | 最大值 | 字节 |
---|---|---|---|
Float | 单精度 | 3.402823466E+38 | 4 |
Double | 双精度 | 1.7976931348623157E+308 | 8 |
创建浮点数表:
直接Float表示没有小数部分;
Float(M,D):M代表总长度,D代表小数部分长度,整数部分长度为M-D
create table my_float(
f1 float,
f2 float(10,2), //10位在精度范围之外
f3 float(6,2) //6位在精度范围之内
)charset utf8;

插入数据

浮点型数据插入,整数部分是不能超出长度的,但是小数部分可以超出长度。小数部分超出的长度系统会自动四舍五入。
②定点型:绝对的保证整数部分不会被四舍五入(不会丢失精度),小数部分理论上也不会丢失精度
decimal,储存空间变长,大致是每9个数字,采用4个字节储存。整数和小数分开计算。
创建定点数表
create table my_decimal
f1 float(10,2),
d1 decimal(10,2)
)charset utf8;

插入数据
定点数的整数部分一定不能超出长度,小数部分的长度可以随意超出

查看数据效果

由此我们发现,数据如果想要精确就用定点型,需要粗略的数据比较大的可以用浮点型。
3、时间日期型
Datetime:时间日期,格式是YYY-mm-dd HH:ii:ss,表示的范围是从10000到9999年,有0值:0000-00-00 00:00:00
Date:日期,就是Datetime中的date部分
Time:时间(段),指定的某个区间之间
Timestamp:时间戳,只是从1970开始的,格式和Datetime完全一致
Year:年份,YYYY,1901年到2155年
创建时间日期表
create table my_date(
d1 datetime,
d2 date,
d3 time,
d4 timestamp,
d5 year
)charset utf8;

插入数据:时间time可以是负数,year可以使用两位数插入,或者四位数插入

Timestamp字段:只要当前所在的任何记录被更新,该字段一定会自动更新成但前时间。

3、字符串类型
在SQL中,将字符串分成了6类**char,varchar,text,blob,enum,和set**
①定长字符串(char):磁盘(二维表)在定义结构的时候,就已经确定了最终数据的存储长度
Char(L):L代表length,可以储存的长度,单位为字符,最大长度值可以为255
eg:Char(4):在utf8环境下,需要4*3=12个字节。
②变长字符串(varchar):在分配空间的时候,按照最大的空间分配
Varchar(L):L表示字符长度,理论长度是65536个字符,但是会多出1-2个字节来确定储存的实际长度
Varchar(10):存储3个汉字:3*3+1=10(bytes)
定长的磁盘空间比较浪费,但是效率高。如果数据基本上确定长度都一样,使用定长
例如:身份证号,电话号,手机号码等。
变长的磁盘空间比较节省,但是效率低。如果数据不能确定长度,使用变长。
例如:姓名,地址等。
③文本字符串:数据量非常大,通常超过255个字符就会使用文本字符串
文本字符串根据存储的数据的格式进行分类:text和blob
text:存储文字
blob:存储二进制数据(通常不用)
④枚举字符串(eunm):事先将所有可能出现的结果都设计好,实际上存储的数据必须是规定好的数据中的一个
enum(可能出现的元素列表);
eg:enum('男','女','不男不女','保密');ps:存储数据只能存储上面定义好的数据

由此,就有了枚举的作用
1、规范数据格式:数据只能是规定中的一种数据
2、节省存储空间(在MySQL中,系统也是自动转换数据格式的尤其是字符串数字)
枚举实际存储的是数值而不是字符串本身
⑤集合字符串:实际存储的是数据不是字符串(集合是多选)
set(元素列表)
可以使用元素列表中的多个元素,用逗号分隔

所以:集合中每一个元素都是对应一个二进制位,被选中为1,没有则为0:最后反过来!
所以:实际存储的是数据不是字符串!!!!和枚举是一样的!都会转化为数据!
所以:集合强大在于能够规范数据和节省空间,而且数据的维护可以通过数据进行
网友评论