整型
''' 分类 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','生蚝'); 报错 # 集合可以只写一个,但是不能写没有列举的 '''