MySQL数据类型
数值类型
整型
-
int
大整型 4个字节 0~2^32-1~-2^32+1(42亿多)
-
tinyint
微小整型 1个字节
- 有符号(
signed
默认): -128~127
- 无符号(
unsigned
):0~255
- 常用:
age tinyint unsigned
-
smallint
小整型 2个字节 0~65535
-
bigint
极大整型 8个字节 0~2^64-1
浮点型
-
float
4个字节,最多显示7个有效位
- 用法:
字段名 float(m,n)
, m
表示总位数,n
表示小数位数
- 浮点型插入整数时会自动补全小数位数
- 小数位如果多于指定的位数,会对下一位四舍五入
-
double
8个字节,最多显示15个有效位
-
decimal
-
decimal(M,D)
,用于保留准确精确度的列
- M范围为
1〜65
,D的范围是0~30
,MySQL要求D小于或等于P
- 存储形式:整数、小数分开存储,将9的倍数包装成4个字节
字符类型
-
char
定长 0~255
,不给定宽度默认宽度为1
-
varchar
变长 1~65535
-
varchar
没有默认宽度,必须给定一个宽度
-
char
和varchar
使用时都给定宽度,但不能超过各自的范围
-
char
和varchar
的特点
-
char
浪费存储空间,性能高
-
varchar
节省存储空间,性能低
- 字符类的宽度和数值类型的宽度的区别
- 数值类型的宽度为显示宽度,只用于
select
查询时使用,和占用存储空间大小无关,可用zerofill
查看效果
- 字符类型的宽度超过则无法存储
枚举类型
- 字段值只能在列举的范围内选择
-
enum
单选,最多有65535个选项 field_name enum(值1,值2,...)
-
set
多选,最多有64个选项 field_name set(值1,值2,...)
create table test(
id int(3) zerofill,
name varchar(15),
sex enum("M","F","Secret"),
likes set("F","M","study","Python")
);
# 插入示例
insert into test(sex,likes) values("Secret","F,study,Python");
日期时间类型
日期基本表示
-
year
: 年 YYYY
-
date
: 日期 YYYY-MM-DD
-
time
: 时间 HH:MM:SS
-
datetime
: 日期时间 YYYY-MM-DD HH:MM:SS
默认值返回NULL
-
timestamp
: 日期时间 YYYY-MM-DD HH:MM:SS
默认值返回系统当前时间
日期时间函数
-
now()
返回服务器当前时间
-
curdate()
返回当前日期
-
curtime()
返回当前时间
-
year(date)
返回指定时间的年份
-
date(date)
返回指定时间的日期
-
time(date)
返回指定时间的时间
# 查询具体某一天
select * from table_name where date(field_name) = "2018-01-01";
# 查询某年某个月份
select * from table_name
where date(field_name) >= "2018-03-01" and date(field_name) <= "2018-03-31";
# 查询某一天的某个时间段
select * from table_name
where date(field_name) = "2018-07-31" and time(field_name)>="10:00:00" and
time(field_name)<="12:00:00";
日期时间运算
select * from table_name where field_name 运算符
# 时间间隔单位
1 day | 2 hour | 1 minute | 2 year | 3 month
# 查询1天以内的记录
select * from table_name
where field_name > (now() - interval 1 day);
# 查询1年以前的记录
select * from table_name
where field_name < (now() - interval 1 year);
# 查询1天以前,3天以内的记录
select * from table_name
where field_name < (now() - interval 1 day) and
field_name > (now() - interval 3 day);