MySQL学习总结(4):数据类型(列类型)
数据类型(列类型):
讲了这么久终于到了数据类型,到目前为止我只用了int和varchar类型,其他类型都没了解过,现在进行学习。
好吧下面这幅图也是从那个大佬的博客找来的
不得不说真的是应有尽有,而且每种类型还分这么细
这里有个新指令:
desc 表名 等价于 show columns from 表名
用于查看数据表的结构;
数值型
1.整数型
-
tinyint
:迷你整型,使用 1 个字节存储数据(常用); -
smallint
:小整型,使用 2 个字节存储数据; -
mediumint
:中整型,使用 3 个字节存储数据; -
int
:标准整型,使用 4 个字节存储数据(常用); -
bigint
:大整型,使用 8 个字节存储数据。
各种数据类型以及unsigned的应用:
数值类型都是默认有符号的,想要无符号就要在末尾追加unsigned,若数据超出范围是会报错的:
显示宽度问题:
即desc 表名时出现的在类型中的括号的数字,表示显示宽度,并不影响数据类型的大小。
通常用法:前导0的使用:
2.小数型
- 浮点型:小数点浮动,精度有限,容易丢失精度;
- 定点型:小数点固定,精度固定,不会丢失精度。
浮点型:
以float为例,直接声明float就没有小数部分,使用float(M,D),其中M表示总长度,D表示小数部分长度,可以以科学计数法表示。
定点型:
这是一个神奇的例子,那个float类型并没有超过位数但还是被四舍五入了,而定点型就不会,至少整数部分不会被四舍五入,对精度要求精确的如货币的存储就用定点型型,而想要表示更大范围又不是很在乎精度问题的就可以用浮点型。
日期时间型
-
datetime
:日期时间,其格式为yyyy-MM-dd HH:mm:ss
,表示的范围是从 1000 年到 9999 年,有零值,即0000-00-00 0000:00
; -
date
:日期,就是datetime
的date
部分; -
time
:时间,或者说是时间段,为指定的某个时间区间之间,包含正负时间; -
timestamp
:时间戳,但并不是真正意义上的时间戳,其是从1970
年开始计算的,格式和datetime
一致; -
year
:年份,共有两种格式,分别为year(2)
和year(4)
其中比较有用的一个类型就是timestamp类型,因为它只要记录被更新它就会变为当前时间,即可以用来记录数据更新的时间。
如图,我并没有插入timestamp的数据,但它会在当前这一行数据被更新时自动更新为当前时间
字符串类型
在 SQL 中,将字符串类型分成了 6 类,分别为:char
、varchar
、text
、blob
、enum
和set
.
- char:定长字符串,最大长度255个字符,对空间比较浪费,但效率高,如果数据长度确定如身份证等就用这个类型;
- varchar:不定长字符串,最大长度65536个字符,比较省空间,但效率低,如果数据长度一开始不确定就用这个类型;
- text:存储文字;
- blob:存储二进制数据,通常不用;
- enum:枚举类型:一个数据只能保存一个元素
- 创建enum类型:
- 插入数据:
- set:集合字符串,一个数据可以保存多个元素:
- 创建set类型:
- 插入数据:
- 而且不管插入顺序如何都会自动排序的,即插入'large,small'后查看时发现会变成'small,large'