数据类型(列类型)
所谓的数据类型:对数据进行统一的分类,从系统的角度出发为了能够使用统一的方式进行管理,根号的利用有限的空间
SQL中将数据类型分为三大类:数值类型,字符串类型和时间类型
整数型
Tinyint:迷你整型,使用一个字节存储,表示的状态最多为256种(常用)
Smallint:小整型,使用2个字节存储,表示的状态最多为65536种
Mediumint:中整型,使用3个字节
int:标准整型,使用4个字节存储(常用)
Bigint:大整型,使用8个字节存储
小数型(带有小数点或者范围超出整型的数值类型)
浮点型(小数点浮动,精度有限而且会丢失精度)
浮点型数据是一种精度型数据,因为超出指定范围之后,会丢失精度(自动四舍五入)
Float:单精度,占用四字节存储数据,精度范围大概7位左右
Double:双精度,占用8字节存储数据,精度范围15位左右
创建浮点数表:浮点的使用方式:直接float表示没有小数部分;float(M,D):M代表总长度,D代表小数部分长度,整数部分涨长为M-D
浮点型数据的插入:整数部分是不能超过长度的,小数部分可以(系统会自动四舍五入)
结果:浮点数一定会进行四舍五入(超出精度范围);浮点数如果是因为系统进位导致整数部分超出指定的长度,那么系统也允许成立
定点型(小数点固定,精度固定,不对丢失精度)
定点型:绝对的保证整数部分不会被四舍五入(不会丢失精度),小数部分有可能(理论小数部分不会丢失精度)
定点数的整数部分一点不能超过长度(进位不可以),小数部分的长度可以随意超出(系统自动四舍五入)
浮点数如果进位导致长度溢出没有问题,但定点数不行
时间日期类型
Datetime:时间日期,格式是YYYY-mm-dd HH:ii:ss,表示的范围是从1000到9999年,有0值:0000-00-00 00:00:00
Date:日期,就是datetime中的date部分
Time:时间(段),指定的某个区间之间,-时间到+时间
Timestamp:时间戳,并不是时间戳,只是从1970年开始的YYYY-mm-dd HH:ii:ss格式与datetime完全一致
Year:年份,两种形式,year(2)和year(4):1901-2156
创建时间日期表
插入数据:时间time可以是负数,而且可以是很大的负数,year可以使用2位数插入,也可以使用四位数
Timestamp字段,只要当前所在的记录被更新,该字段一定会自动更新成当前时间
字符串类型(char,varchar,text,blob,enum,set)
定长字符串
定长字符串:char,磁盘(二维表)在定义结构的时候,就已经确定了最终数据的储存长度
Char(L):L代表length,可以存储的长度,单位为字符,最大长度值可以为255.
Char(4):在utf8环境下,需要4*3=12个字节
变长字符串
变长字符串:varchar,在分配空间的时候,按照最大的空间分配:但实际上最终用了多少是根据具体的数据来确定的
Varchar(L):L表示字符长度,理论长度65536个字符,但是会多出1到2个字节来确定存储的实际长度,但是实际上如果长度超过255,即不用定长也不用变长,使用文 本字符串text
Varchar(10):的确存了10个汉字,utf8环境,10*3+1=31(bytes)
存储了三个汉字:3*3+1=10(bytes)
定长与变长的存储的实际空间(utf8)
文本字符串
如果数据非常大,通常说超过255个字符就会使用文本字符串
文本字符串根据存储的数据格式进行分类:text和blob
text:存储文字(二进制数据实际上都是存储路径)
blob:存储二进制数据(通常不用)
枚举字符串
枚举:enum,事先将所有可能出现的结果设计好,实际上存储的数据必须是规定好的数据中的一个
作用一:规范数据格式:数据只能是规定的数据中的其中一个
作用二:节省存储空间(枚举别名:单选框):枚举实际存储的是数值而不是字符串本身
枚举元素的实际规律:按照元素出现的顺序,从1开始编号
枚举的原理:枚举在进行数据规范的时候(定义的时候,系统会自动建立一个数字与枚举元素的对应关系(关系放到日志中);
然后在进行数据插入的时候,系统自动将字符转换成对应的数字存储,然后在进行数据提取的时候,系统自动将数
值转换成对应的字符串显示(因为枚举实际存储的是数值,所以可以直接插入数值)
集合字符串
集合和枚举很类似:实际存储的是数值,而不是字符串(集合是多选)
集合使用方式:
定义:Set(元素列表)
使用:可以使用元素列表中的元素(多个),使用逗号分隔
创建集合表
插入数据:可以使用多个元素字符串组合,也可以直接插入数值
查看数据:数值+数据查看
集合中每一个元素都是对应一个对应二进制位
集合中元素的顺序没有关系:最终系统都会去匹配顺序
MySQL的记录长度
65535个字节,varchar达不到理论长度,null占用一个字节,text不占用记录长度(但本身占据10个字节)