mysql字段类型

这篇博客主要来学习mysql中的字段类型。在sql中将数据类型分成了3大类:数值类型,字符串类型,日期类型。

数值类型

数值型数据:都是数值,系统将数值分为整数型和小数型

整数型

整数型用来存放整型。整数型又分为下面五种:

  • Tinyint:
    迷你整型,用一个字节来存储,最多表示256种

  • Smallint:
    小整型,使用两个字节来存储,最多表示65536种

  • Mediumint:
    中整型,使用3个字节来存储。

  • Int
    标准整型,使用4个字节来存储。

  • Bigint
    大整形,使用8个字节存储。
    mysql字段类型_第1张图片
    在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;

mysql字段类型_第2张图片

-- 插入数据
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);

mysql字段类型_第3张图片
浮点数会进行四舍五入(超出精度范围),浮点数如果是因为系统进位导致整数部分超出指定的长度,那么系统也不会出错
mysql字段类型_第4张图片

定点型

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

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

mysql字段类型_第5张图片

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

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

-- 小数部分超出
insert into my_decimal values(12.1898,12.99999);

mysql字段类型_第6张图片

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

mysql字段类型_第7张图片

时间日期类型

  • Datetime : 时间日期, 格式:YYYY-mm-dd HH:mm:ss
  • Date : 日期
  • Time : 时间段,指定某一个时间区间
  • Timestamp : 从1970年开始的YYYY-mm-dd HH:mm:ss
  • Year : 年份
    mysql字段类型_第8张图片
-- 创建时间日期表
create table my_date( d1 datetime, d2 date, d3 time, d4 timestamp, d5 year )charset utf8;

mysql字段类型_第9张图片

  • 插入数据:
    时间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);

mysql字段类型_第10张图片
timestamp:只要当前所在记录被更新,该字段一定会自动更新为当前时间

字符串类型

在sql中,将字符串类型分为六大类:

  • char
  • varchar
  • text
  • blob
  • enum
  • set
    mysql字段类型_第11张图片

定长字符串

定长字符串: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;

mysql字段类型_第12张图片

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

-- 插入错误数据
insert into my_enum values('male');

mysql字段类型_第13张图片
我们可以通过为枚举类型+0,就可以判断原来的数据存储的到底是字符串,还是数值,如果是字符串,最终结果永远是0,否则就是其他值
mysql字段类型_第14张图片

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

select gender+0,gender from my_enum;

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

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

mysql字段类型_第16张图片

集合字符串

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

-- 集合的使用方式
定义: set(元素列表) 使用: 可以使用多个元素列表中的元素,使用逗号分隔 -- 创建集合表 create table my_set( loves set('唱歌','跳舞','聊天','运动','吹牛','写代码') )charset utf8;

mysql字段类型_第17张图片

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

-- 按照数值插入
insert into my_set values(3);

mysql字段类型_第18张图片
mysql字段类型_第19张图片

列属性

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

  • 常用的列属性:
    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;

mysql字段类型_第20张图片

默认值

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

mysql字段类型_第21张图片

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

mysql字段类型_第22张图片

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

你可能感兴趣的:(mysql,字段)