数据类型
一、数据类型的分类
数值类型、字符串类型、日期类型、string类型;
二、数值类型
位类型:bit;
整数类型:tinyint(1字节)、smallint(2字节)、mediumint(3字节)、int(4字节)、bigint(8字节);
浮点数类型:float、double、decimal;
数值类型除了bool和bit类型都可以在后面添加unsigned;不添加默认是有符号类型;当数据大小超范围了,语言上一般是发生截断,而MySQL中直接就发生告警,操作失败;即能够保证插入到数据库表中的数据一定是合法的;所以i数据类型本身也是一种约束,倒闭程序员进行合法的使用;整数类型定义格式:属性名 属性类型 (unsigned);结合应用场景来选择合适的大小;
bit类型:后面括号里可以指定位数,不添加默认值为1,范围是1-64;bit字段的显示默认是以ASCII码值显示;
float类型:语法格式 float[(m,d)],m表示指定显示长度,d指定显示小数位数,占用空间大小为4字节;特点:整数部分等于m-d个位数,在范围内,数据会四舍五入,保存符合小数位数的数据;精度大约是7位;
double类型:8字节使用与float相似;
decimal类型:与float类似但是小数的精度并不会丢失,而float类型位数过大会造成精度丢失;decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10,根据MySQL的版本不同发生改变;总之精度要求高就选用decimal;
三、字符串类型
char类型:固定长度字符串,格式:char(L),L表示可以存储的长度,单位字符(与有语言中的字符表示的不是一个意思),最大长度值为255;
varchar类型:变长字符串。格式:varchar(L),L表示可以存储的字符长度,最大长度为65535个字节;以UTF-8的字符单位来保存;1个字符三个字节;
两个类型的区别就是,varchar和char类型中的L规定的是上限,但是char是直接开辟好空间,而varchar是动态开辟的,用多少开辟多少;对于varchar类型,0-65535个字节中实际上是有1-3个字节来保存字符数量的,而char不会有额外的开销;使用gbk的化,就是2个字节来表示一个字符;
占用空间较大的类型使用text;
二进制数据blob;
四、日期和时间类型
即年月日-时分秒
常用的日期有三个:date 格式:‘年-月-日’,占用三个字节;datetime 格式:‘年-月-日 时:分:秒’,表示范围为1000-9999,占用八个字节;timestamp 格式:和datetime格式一致,只不过时间会因为数据的更新自动变化,占用四个字节;
五、string类型——enum和set类型
枚举类型 enum 格式:enum(‘选项1’,‘选项2’,‘选项3’),用来支持多选一;实际上只是储存了多个选项中的一个值,而这些选项实际上存储的是数字,从左往右的顺序依次是1,2,3…最多有65535个;
集合类型 set 格式:set((‘选项1’,‘选项2’,‘选项3’),用来支持多选多或者多选一;选项对应数字依次是1,2,4,8…最多64个选项;数字0表示空串;NULL表示此位置什么也没有;此时这些数字表示的不是下标而是位图;
这两个类型也是可以插入NULL;
5.1两个类型的查找
select *from where 属性='值';#需要注意的是会进行严格匹配,所以需要借助集合查询函数find_in_set()
select 函数#是可以直接执行函数的;
会形成两行的表格,第一行是函数名,第二行是函数的返回值;
find_in_set的返回值是零和非零;非零表示在集合中查找到和查到的位置下标;零表示没有查找到;
where充当判断语句会将find_in_set的返回值传递给select,然后显示非零的一行;
where由于是判断语句,所以支持and多个二条件连接起来;
select * from 表名 where find_in_set('值',集合属性) and where find_in_set('值',集合属性);