这篇博客主要来学习mysql中的字段类型。在sql中将数据类型分成了3大类:数值类型,字符串类型,日期类型。
##数值类型 ##
数值型数据:都是数值,系统将数值分为整数型和小数型
###整数型###
整数型用来存放整型。整数型又分为下面五种:
-
Tinyint:
迷你整型,用一个字节来存储,最多表示256种 -
Smallint:
小整型,使用两个字节来存储,最多表示65536种 -
Mediumint:
中整型,使用3个字节来存储。 -
Int
标准整型,使用4个字节来存储。 -
Bigint
大整形,使用8个字节存储。
在sql中的数值类型默认都是有符号的,即有正负之分,有时候,需要使用无符号数据:
需要给数据类型限定:int unsigned ,从0开始
###小数型###
小数型:带有小数点或者范围超出整型的数值类型。在sql中将小数型又分为两种:浮点型和定点型。
- 浮点型:小数点浮动,精度有限,会丢失精度。
- 定点性: 小数点固定,精度固定,不会丢失精度。
####浮点型####
浮点型数据是一种精度型数据,因为超出指定范围之后,会丢失精度(会自定的四舍五入).
浮点型理论上分为两种: - float:单精度,占用4个字节存储数据,精度范围大概7位左右。
- double: 双精度,占用8个字节存储数据,精度范围大概15位左右。
创建浮点数表:浮点的使用方式:直接使用float表示没有小数部分;float(M,D),M代表总长度,D代表小数部分长度。整数部分长度=M-D
-- 创建浮点数表
create table my_float(
f1 float,
f2 float(10,2),
f3 float(6,2)
)charset utf8;
-- 插入数据
insert into my_float values(1000.10,1000.10,1000.10); --符合条件
insert into my_float values(99999999,99999999.99,9999.99); --符合条件
注意:整数部分是不能超过设定的长度的,但是小数部分会自动四舍五入
-- 超出长度插入
-- 小数部分超出
insert into my_float values(99999999,999.9955555555,99.995555);
-- 整数部分超出
insert into my_float values(99999999,12323123999.99,1234599.91);
浮点数会进行四舍五入(超出精度范围),浮点数如果是因为系统进位导致整数部分超出指定的长度,那么系统也不会出错
####定点型####
定点型,绝对的保证整数部分不会被四舍五入(不会丢失精度),小数部分有可能丢失精度。
-- 创建定点数表
create table my_decimal(
f1 float(4,2),
d1 decimal(4,2)
)charset utf8;
定点数的整数部分一定不能够超出长度,但是小数部分的长度可以随意超出(系统自动四舍五入)
-- 插入数据
-- 有效数据
insert into my_decimal values(12.90,12.90);
-- 小数部分超出
insert into my_decimal values(12.1898,12.99999);
-- 定点为超出
-- 有效数据
insert into my_decimal values(99.99,99.99);
-- 浮点数超出,进位导致出错
insert into my_decimal values(99.99,99.999);
##时间日期类型##
- Datetime : 时间日期, 格式:YYYY-mm-dd HH:mm:ss
- Date : 日期
- Time : 时间段,指定某一个时间区间
- Timestamp : 从1970年开始的YYYY-mm-dd HH:mm:ss
- Year : 年份
-- 创建时间日期表
create table my_date(
d1 datetime,
d2 date,
d3 time,
d4 timestamp,
d5 year
)charset utf8;
- 插入数据:
时间time可以是负数,year可以使用两位数插入,也可以使用4位数插入。
-- 插入数据
insert into my_date values('2016-3-14 15:44:17','2016-3-14','15:44:55','2016-3-14 15:45:37',2016);
-- time使用负数
insert into my_date values('2016-3-14 15:44:17','2016-3-14','-15:44:55','2016-3-14 15:45:37',2016);
-- 当负数小于24小时的时候,表示时间段
insert into my_date values('2016-3-14 15:44:17','2016-3-14','-115:44:55','2016-3-14 15:45:37',2016);
-- '-1 15:44:55' 表示过去一天
insert into my_date values('2016-3-14 15:44:17','2016-3-14','-1 15:44:55','2016-3-14 15:45:37',2016);
-- year可以使用两位或者四位
insert into my_date values('2016-3-14 15:44:17','2016-3-14','-1 15:44:55','2016-3-14 15:45:37',69);
insert into my_date values('2016-3-14 15:44:17','2016-3-14','-1 15:44:55','2016-3-14 15:45:37',70);
timestamp:只要当前所在记录被更新,该字段一定会自动更新为当前时间
##字符串类型 ##
在sql中,将字符串类型分为六大类:
- char
- varchar
- text
- blob
- enum
- set
###定长字符串###
定长字符串:char,指的是在定义结构的时候就已经确定了最终数据的存储长度。
char(L): L表示存储的长度。最大长度为255.
char(4): 在utf8环境下,需要4*3 = 12个字节
###变长字符串###
变长字符串:varchar,在分配空间的时候,按照最大的空间分配,但是会根据最终的数据来确定,最终使用的大小。
varchar(L) : L表示字符长度
###文本类型###
如果数据量非常大,通常情况下,超过255个字符就会使用文本字符串。文本字符串根据存储的数据的格式分为两类:
- text : 存储文字
- blob : 存储二进制数据
###枚举字符串###
枚举:enum,事先将所有的结果都设计好,实际上存储的数据必须是规定的数据中的一个。
-- 枚举的使用方式
定义: enum(可能出现的元素列表); //如:enum('男','女');
使用: 存储数据,只能存储上面定义好的数据。
-- 创建枚举表
create table my_enum(
gender enum('boy','girl')
)charset utf8;
-- 插入数据
insert into my_enum values('boy'),('girl');
-- 插入错误数据
insert into my_enum values('male');
我们可以通过为枚举类型+0,就可以判断原来的数据存储的到底是字符串,还是数值,如果是字符串,最终结果永远是0,否则就是其他值
-- 将字段结果取出来,进行+0运算
select gender+0,gender from my_enum;
根据上面的案例,我们应该可以总结出:枚举在进行数据规范的时候,系统会自动建立一个数字,与枚举元素的对应关系,然后在进行数据插入的时候,系统自动将字符转换成对应的数字存储,然后在数据提取的时候,系统自动将对应的数值转换成字符串显示。
- 由于枚举使用的是数值来存储的,所以我们可以通过插入数值来插入对应的枚举值
-- 使用数值插入枚举
insert into my_enum values(1),(2);
###集合字符串###
集合类似于枚举:实际存储的是数值(集合是多选的)
-- 集合的使用方式
定义: set(元素列表)
使用: 可以使用多个元素列表中的元素,使用逗号分隔
-- 创建集合表
create table my_set(
loves set('唱歌','跳舞','聊天','运动','吹牛','写代码')
)charset utf8;
- 插入数据:可以使用多个元素字符串组合,也可以直接插入数值
-- 插入数据
insert into my_set values('唱歌,聊天,写代码');
-- 按照数值插入
insert into my_set values(3);
##列属性 ##
列属性用来约束要存储的数据,用来保证数据的合法性。
- 常用的列属性:
null,not null , default , primary key , unique key , auto increment , comment
###空属性### - null 默认值
- not null 不为空
###列描述###
列描述:是用来描述字段的,会根据表创建语句保存。
-- 创建my_teacher表
create table my_teacher(
name varchar(20) not null comment '老师姓名',
salery decimal(10,2) not null comment '工资'
)charset utf8;
###默认值###
-- 创建默认值表
create table my_default(
name varchar(20) not null,
age tinyint unsigned default 18,
gender enum('男','女') default '男'
)charset utf8;
-- 插入默认值
insert into my_default (name) values('张三');
insert into my_default values('李四',22,'女');
ok,今天就暂时到这里了。
欢 迎 关 注 我 的 公 众 号 “编 程 大 全”
专注技术分享,包括Java,python,AI人工智能,Android分享,不定期更新学习视频