当前位置:   article > 正文

mysql字段类型_mysql 数据类型 带正负符号

mysql 数据类型 带正负符号

这篇博客主要来学习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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里写图片描述

-- 插入数据
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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

这里写图片描述
浮点数会进行四舍五入(超出精度范围),浮点数如果是因为系统进位导致整数部分超出指定的长度,那么系统也不会出错
这里写图片描述

####定点型####
定点型,绝对的保证整数部分不会被四舍五入(不会丢失精度),小数部分有可能丢失精度。
这里写图片描述

-- 创建定点数表
create table my_decimal(
	f1 float(4,2),
	d1 decimal(4,2)
)charset utf8;
  • 1
  • 2
  • 3
  • 4
  • 5

这里写图片描述

定点数的整数部分一定不能够超出长度,但是小数部分的长度可以随意超出(系统自动四舍五入)

-- 插入数据
-- 有效数据
insert into my_decimal values(12.90,12.90);

-- 小数部分超出
insert into my_decimal values(12.1898,12.99999);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里写图片描述

--  定点为超出
-- 有效数据
insert into my_decimal values(99.99,99.99);
-- 浮点数超出,进位导致出错
insert into my_decimal values(99.99,99.999);
  • 1
  • 2
  • 3
  • 4
  • 5

这里写图片描述

##时间日期类型##

  • 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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这里写图片描述

  • 插入数据:
    时间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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

这里写图片描述
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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这里写图片描述

-- 插入数据
insert into my_enum values('boy'),('girl');

-- 插入错误数据
insert into my_enum values('male');
  • 1
  • 2
  • 3
  • 4
  • 5

这里写图片描述
我们可以通过为枚举类型+0,就可以判断原来的数据存储的到底是字符串,还是数值,如果是字符串,最终结果永远是0,否则就是其他值
这里写图片描述

-- 将字段结果取出来,进行+0运算

select gender+0,gender from my_enum;
  • 1
  • 2
  • 3

这里写图片描述
根据上面的案例,我们应该可以总结出:枚举在进行数据规范的时候,系统会自动建立一个数字,与枚举元素的对应关系,然后在进行数据插入的时候,系统自动将字符转换成对应的数字存储,然后在数据提取的时候,系统自动将对应的数值转换成字符串显示。

  • 由于枚举使用的是数值来存储的,所以我们可以通过插入数值来插入对应的枚举值
-- 使用数值插入枚举
insert into my_enum values(1),(2);
  • 1
  • 2

这里写图片描述

###集合字符串###
集合类似于枚举:实际存储的是数值(集合是多选的)

-- 集合的使用方式
定义: set(元素列表)
使用: 可以使用多个元素列表中的元素,使用逗号分隔

-- 创建集合表
create table my_set(
	loves set('唱歌','跳舞','聊天','运动','吹牛','写代码')
)charset utf8;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

这里写图片描述

  • 插入数据:可以使用多个元素字符串组合,也可以直接插入数值
-- 插入数据
insert into my_set values('唱歌,聊天,写代码');

-- 按照数值插入
insert into my_set values(3);
  • 1
  • 2
  • 3
  • 4
  • 5

这里写图片描述
这里写图片描述

##列属性 ##
列属性用来约束要存储的数据,用来保证数据的合法性。

  • 常用的列属性:
    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;
  • 1
  • 2
  • 3
  • 4
  • 5

这里写图片描述

###默认值###

-- 创建默认值表
create table my_default(
	name varchar(20) not null,
	age tinyint unsigned default 18,
	gender enum('男','女') default '男'
)charset utf8;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

这里写图片描述

-- 插入默认值
insert into my_default (name) values('张三');
insert into my_default values('李四',22,'女');
  • 1
  • 2
  • 3

这里写图片描述

ok,今天就暂时到这里了。

欢 迎 关 注 我 的 公 众 号 “编 程 大 全”

专注技术分享,包括Java,python,AI人工智能,Android分享,不定期更新学习视频
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/999505
推荐阅读
相关标签
  

闽ICP备14008679号