整型
'''
分类
TINYINT SMALLINT MEDIUMINT INT BIGINT
作用
存储年龄,等级,id,号码等等
图片介绍地址:https://images2017.cnblogs.com/blog/1036857/201708/1036857-20170801181433755-146301178.png
以TINYINT作验证
是否有符号
默认情况下是带符号的
超出会如何
超出限制只存最大可接收值
create table t9(id tinyint);
insert into t9 values(-129),(256); 报错:ERROR 1264 (22003): Out of range value for column 'id' at row 1
约束条件之unsigned(无符号)
create table t10(id tinyint unsigned);
insert into t10 values(-1),(256); 和上面报错一样
create table t11(id int);
insert into t11 values(-1),(256);
int默认也是带符号的
整型默认情况下都是带有符号的
针对整型,括号内的宽度到底是干嘛的?(作显示,并不是指只能存多少位)
create table t12(id int(8));
insert into t12 values(123456789);
insert into t12 values(1);
特例:只有整型括号里面的数字不适表示限制位数
id int(8)
如果数字没有超出8位,那么默认用空格填充至8位
如果数字超出了8位,那么有几位就存几位(但是还是要遵守最大范围)
约束条件之zerofill
create table t13(id int(8) unsigned zerofill);
用0填充至8位
总结:
针对整型字段,括号内无需指定宽度,因为它默认的宽度已经足够显示所有的数据了
'''
浮点型
'''
分类
float double decimal
作用
身高,体重,薪资...
存储限制
float(255,30) # 总共255位,小数部分占30位
double(255,30) # 总共255位,小数部分占30位
decimal(65,30) # 总共64位,小数部分占30位
精确度验证
create table t15(id float(255,30));
create table t16(id double(255,30));
create table t17(id decimal(65,30));
insert into t15 values(1.111111111111111111111111111111);
insert into t16 values(1.111111111111111111111111111111);
insert into t17 values(1.111111111111111111111111111111);
精确度:float<double<decimal
要结合实际应用场景,三者都能使用
扩展:其实在实际生产中,很多看似需要用整型或者浮点型存储的数据,内部可能都是用的字符类型存储
'''
字符类型
'''
分类
char
定长;char(4)数据超过四个字符直接报错,不够四个字符空格补全
varchar
变长;varchar(4)数据超过四个字符直接报错,不够有几个存几个
create table t18(name char(4));
create table t19(name varchar(4));
insert into t18 values('a');
insert into t19 values('a');
介绍一个小方法char_length统计字段长度
select char_length(name) from t18;
select char_length(name) from t19;
首先可以肯定的是char硬盘上存的绝对是真正的数据,带有空格;但是在显示的时候,mysql会自动将多余的空格剔除
再次修改sql_mode,让MySQL不要做自动剔除操作
set global sql_mode = 'strict_trans_tables,pad_char_to_full_length'; 因为是修改,所以之前的严格模式也需要带上
char与varchar对比
char
缺点:浪费空间
优点:存取都很简单,直接按照固定的字符存储数据即可
jason egon mike
存按照字符长度存,取也直接按照字符长度取
varchar
有点:节省空间
缺点:存取较为麻烦
1bytes+jason 1bytes+egon 1bytes+mike
存的时候需要制作报头,取的时候也需要先读取抱头,之后才能读取真实数据
以前基本上都是用的char,其实现在用varchar的也挺多
后面使用哪个都行,建议使用varchar
补充:
进来公司之后你完全不需要考虑字段类型和字段名,因为产品给你发的邮件上已经全部指明了
'''
时间类型
'''
date
年月日2021-8-7
datetime
年月日时分秒2021-8-7 10:10:10
time
时分秒10:10:10
Year
2021
create table student(
id int,
name varchar(16),
born_year year,
birth date,
study_time time,
reg_time datetime
);
insert into student values(1,'egon','2020','1880-11-11','11:11:11','2021-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,'jason','male');
insert into user values(2,'egon','xxxooo'); 报错
# 枚举字段,后期在存数据的时候只能从枚举里面选择一个存储
create table teacher(
id int,
name char(16),
gender enum('male','female','others'),
hobby set('read','DBJ','hecha')
);
insert into teacher values(1,'jason','male','read,DBJ');
insert into teacher values(2,'egon','male','read');
insert into teacher values(3,'mike','others','生蚝'); 报错
# 集合可以只写一个,但是不能写没有列举的
'''