整型
-
分类
TINYINT SMALLINT MEDUIMINT INT BIGINT -
作用
存储年龄、等级、id、号码等等
""""
tinyint 1个字节 有符号范围(-128~127) 无符号(0~255) unsigned
int 4个字节 有符号范围(-21亿~21亿左右) 无符号(0~42亿)
""""
# 整型默认情况下都是带有符号的
create table t1(id int , age tinyint);
insert into t1(id,sex) values(4000000000,127) # error: out of range
insert into t1(id,sex) values(13,128) # error: out of range
insert into t1(id,sex) values(13,127);
# 约束条件之unsigned 无符号
create table t2(id tinyint unsigned);
浮点型
-
分类
FLOAT、DOUBLE、DECIMAL -
作用
身高、体重、薪资
# 存储限制
float(255,30) # 总共255位 小数部分占30位
double(255,30) # 总共255位 小数部分占30位
decimal(65,30) # 总共65位 小数部分占30位
# 精确度验证
create table t3(id float(255,30));
create table t4(id double(255,30));
create table t5(id decimal(65,30));
insert into t3 values(1.111111111111111111111111111111);
insert into t4 values(1.111111111111111111111111111111);
insert into t5 values(1.111111111111111111111111111111);
float < double < decimal
# 要结合实际应用场景 三者都能使用
字符类型
- 分类
CHAR VARCHAR
char
定长
char(4) 数据超过四个字符直接报错, 不够四个字符空格补全
varchar
变长
varchar(4) 数据超过四个字符直接报错, 不够有几个存几个
create table t6(name char(4));
create table t7(name varchar(4));
insert into t6 values('a');
insert into t7 values('a');
# 介绍一个小方法 char_length统计字段长度
select char_length(name) from t6;
select char_length(name) from t7;
首先可以肯定的是char硬盘上存的绝对是真正的数据, 带有空格的
但是在显示的时候MySQL会自动将多余的空格剔除
char与varchar对比
char
缺点:浪费空间
优点:存取都很简单
直接按照固定的字符存取数据即可
steven sammi jack
存按照五个字符存 取也直接按照五个字符取
varchar
优点:节省空间
缺点:存取较为麻烦
1bytes+steven 1bytes+sammi 1bytes+jack
存的时候需要制作报头
取的时候也需要先读取报头 之后才能读取真实数据
以前基本上都是用的char, 现在用varchar的也挺多
时间类型
- 分类
date: 年月日 2020-5-4
datetime: 年月日时分秒 2020-5-4 11:11:11
time: 时分秒11:11:11
Year: 2020
create table student(
id int,
name varchar(16),
born_year year,
birth date,
study_time time,
reg_time datetime
);
insert into student values(1,'steven','1880','1880-11-11','11:11:11','2020-11-11 11:11:11');
枚举与集合类型
- 分类
枚举(enum) : 从列出来的数据当中选一个 (性别)
集合(set) : 从列出来的数据当中选多个 (爱好)
create table user(
id int,
name char(16),
gender enum('male','female','others')
);
# 枚举字段 后期在存数据的时候只能从枚举里面选择一个存储
insert into user values(1,'steven','male'); 正常
insert into user values(2,'jack','xxxxooo'); 报错
create table teacher(
id int,
name char(16),
gender enum('male','female','others'),
hobby set('read','DBJ','hecha')
);
# 集合可以只写一个 但是不能写没有列举的
insert into teacher values(1,'steven','male','read'); 正常
insert into teacher values(2,'jack','female','DBJ,hecha'); 正常
insert into teacher values(3,'peter','others','生蚝'); 报错