MySQL 数据库存储类型

数值类型

数值类型包含:int tinyint bigint float decimal

1、整型 unsigned signed

int 大整型(占 4 个字节的存储空间)

0 ~ 2**32-1(约为42亿)

tinyint 微小整型(占 1 个字节的存储空间)

0~255

bigint 极大整型(占 8 个字节的存储空间)

create table stu (id int,name char(15),age tinyint unsigned,phone bigint);

备注:1字节 = 8位,可以表示 2*8 = 256 种状态,表示无符号的整形数字范围为 0-255,表示有符号整形范围为 -128-127

2、浮点型

float 占4个字节,最多显示7个有效位。常用于成绩。

...字段名 float(总位数, 小数位)  ...

float(5,2)取值范围:

-999.99~+999.99

decimal 最多可以显示 28 个有效位

...字段名 decimal(总位数, 小数位) ...

存储空间计算:整数部分和小数部分分开存储,将 9 的倍数包装成 4 个字节,余数占用的字节数如下:

decimal 的整数位和小数位模9的余数和字节对照表

余数 字节
1-2 1个字节
3-4 2个字节
5-6 3个字节
7-8 4个字节

例如:decimal(19,9)

整数部分:

10/9=1 ... 1 -----> 4字节 + 1字节 = 5字节

小数部分:

9/9=1 ... 0  -----> 4字节 + 0字节 = 4字节

注:float的最大缺陷最多显示7个有效位,因此使用较少;而decimal则是使用最为频繁的数据类型,效率非常高,且存储的范围非常大。

字符类型

char 定长:当列中存储的字符串达不到最大长度时,使用空格进行补足。

注:char 必须说明宽度值。

varchar 变长

注:varchar 必须说明宽度值。

char 浪费存储空间,但性能高。varchar 节约存储空间,但存储性能低。

text / longtext(4G)

数值类型宽度为显示宽度,和占用存储空间大小无关;字符类型的宽度,超过则无法存储:

# int(3)为显示宽度,int占用4个存储字节,表示0~2*32-1
ysql> create table tab3(number int(3) zerofill); 
ysql> insert into tab3 value(1),(2),(03);
ysql> select * from tab3;
001 | 
002 | 
003 |
ysql> insert into tab3 value(12345678);
ysql> select * from tab3;
001 | 
002 | 
003 |
12345678 |

枚举类型

对于枚举类型的字段,字段值只能在列举的范围内选择。

# 多选
字段名 enum(val1,val2,...)
# 单选
字段名 set(val1,val2,...)

日期时间类型

日期时间类型:date time datetime timestamp
date 日期:

"YYYY-MM-DD"

time 时间:

"HH:MM:SS"

datetime 日期时间:

"YYYY-MM-DD HH-MM-SS"

timestamp 日期时间:

"YYYY-MM-DD HH-MM-SS"

注:datetime 不给值默认返回 Null;timestamp(时间戳)不给值默认返回当前时间。

日期时间函数

日期时间函数:NOW() CURDATE() CURTIME()

NOW() 返回服务器当前的时间:

select now();

CURDATE() 返回当前日期:

select curtime();

CURTIME() 返回当前时间:

select curdate();

注:在命令行查询函数返回的结果 :select 函数();,如:select database(); 查询当前所在数据库。

插入日期时间:

insert into tab1 values(...,CURDATE(),CURTIME(),NOW());

日期时间运算

语法格式:

select ... from 表名 where 字段名 运算符 (时间 - interval 时间间隔单位);

说明:时间间隔需要使用 interval 关键字声明,时间间隔单位可以是 1 day 2 hour 1 minute 1 year 3 month

示例:

# 现在的时间 - 1天的时间 = 一天前的时间
where meeting > (now() - interval 1 day)

查询1天以内的记录:

select * from 表名 where 字段名 > (now() - interval 1 day)

查询2年前至今年的记录:

select * from tb2 where time1>(now() - interval 2 year) and time1<(now() + interval 1 year);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容