加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

(三)数据类型

发布时间:2020-12-14 04:29:47 所属栏目:大数据 来源:网络整理
导读:? ? ? ? ? ? 数值型 整数:tinyint,smallint,int,bigint int:4个字节,1个字节是8位,32 查询速度:索引是建立在字段基础上的,会存储字段的数据?? ? 表设计中数据类型选择第一条原则,选择合适的字段数据类型,最小且满足实际需要 tinyint,smallint

?

?

?

?

?

?

数值型

整数:tinyint,smallint,int,bigint

int:4个字节,1个字节是8位,32

查询速度:索引是建立在字段基础上的,会存储字段的数据??

?

表设计中数据类型选择第一条原则,选择合适的字段数据类型,最小且满足实际需要

tinyint,smallint

smallint? 2个字节

tinyint? 1个字节,最多的使用场景是用来做状态位? ? -128-127? ?status 0,1,2,3,4

create table order(

id int

orderstatus tinyint unsinged?default 0 comment"0:已完成,1:正在发货,2:"

level 1-100

svip level 1-

)

unsinged 无符号,0-255

int(M)M值只是用来表示显示宽度

int(1)和int(10)有什么区别? ?影响的是显示宽度

?create?table?test_int(col1?int,col2?int(5));?
存储空间还是一样的,默认显示全的11位,用0填充的时候会有区别,会把前面的位补齐
auto_increment int 20多亿? ?起始值从1开始,当达到最大值了,插入会失败
delete是不会减小自增的起始值
truncate可以,相当于表重建,起始值归于1
自增字段一定是个key,一般都是用来做主键,primary key
?
小数
float·
double
当数值变多的时候? float和double精度会不准确

decimal(M,D)

M代表总长度

D代表小数点后的位数

?

bit

字符串

char(M)? 固定的? ? ?存储的位数和字符集有关系? ? M代表字符? ?M是多少,就占用多少个字符

varchar(M)? 实际存储空间和和字符集有关系? ?

text? 5.7以后支持全文索引

blob? 游戏行业? 二进制流

char和varchar区别

在结尾有空格的情况下,char默认会去掉结尾空格,varchar会 保留结尾空格

char(4)? 4个字符? 实际存储空间? 每个字符占多少字节,utf-8一个字符占3个字节? ?utf-8:4*3=12字节

varchar(4) 4代表最大存储字符数,如果存了1个字符,存储空间1*3+1=4个字节? ? 长度不固定,为什么+1,是因为需要一个字节的长度表示到底存了多少个字符? ? 一旦超过255,需要+2,??256*3+2=

X? ? ? ? ? ? ?AAAA

0-255

一个字节代表0-255,超过255以后,一个字节代表不了了,就需要两个字节

?

定长和非定长在索引优化上,可能定长的更好一些

实际使用场景:

varchar:朋友圈

char可以做数据合法性校验? ?序列号? ?长度固定

text

?

?

时间

时间数据类型:year,data,datatime,timestamp,time

2018

2018-11-24

2018-11-24 11:18:00

current timestamp? on update

这个字段发生变更了,这张表的时间戳字段就会发生变更

时区,是否依赖操作系统

?

一张表中,多个timestamp字段,只有一个timestamp有on update? 会随着字段的变更发生变更

timestamp适合用于统计分析,哪些表发生了哪些变化

把一个时间函数转换为时间戳

时间戳? 1970年到现在过去的秒数

把一个时间戳转换为时间

mysql中可以直接乘除法,当计算器用

?

enum类型和set类型

enum枚举? ?限定了取值范围,必须是给定范围的一个

set? ?是必须是给定范围的子集

?

练习

student表

id字段

名字字段? 一般名字不会超过10个字符

出勤状态

开学时间

性别

年龄

?CREATE?TABLE?`student`?(
??`ID`?int(11)?NOT?NULL?AUTO_INCREMENT?COMMENT?‘主键ID‘,
??`name`?varchar(20)?DEFAULT?‘‘?COMMENT?‘学生姓名‘,
??`stu_status`?tinyint(1)?DEFAULT?‘0‘?COMMENT?‘0:出勤,1:缺勤‘,
??`start_date`?datetime?DEFAULT?‘0000-00-00?00:00:00‘?COMMENT?‘开学时间‘,
??`gender`?enum(‘M‘,‘F‘)?DEFAULT?NULL?COMMENT?‘学生性别‘,
??`age`?tinyint(4)?DEFAULT?‘0‘?COMMENT?‘学生年龄‘,
??PRIMARY?KEY?(`ID`)
)?ENGINE=InnoDB?DEFAULT?CHARSET=utf8?COMMENT=‘2018-学生信息表-by?yeq‘

内置函数

内置函数可以直接用select调用

concat拼接

?

?

?

去空格

重复

替换

比较两个字符的ascii码

?从第几个字符开始截取的长度

取0-100的随机数

floor(x)返回小于等于x的最大整数值

select floor(rand()*100);

round四舍五入

select round(rand()*100);

日期和时间函数

select date_add(now(),interval 3 day);当前时间+3天

select date_sub(now(),interval 3 day);当前时间-3天

select date_format(now(),"%Y年%m%月%d日%H:%m:%s");

select date_format(now(),‘%Y-%M-%D‘);

?

流程函数

create?table?salary(userid?int,salary?decimal(9,2));
insert?into?salary
values(1,1000),(2,2000),(3,3000),(4,4000),(5,5000),(6,null);
select?*?from?salary;?
?

select userid,salary,ifnull (salary,0) from salary;

select userid,salary,if(salary>2500,‘high‘,‘low‘) from salary;

select?userid,case?when?salary<=2000? then?‘low‘? when?salary<=3000? then?‘mid‘?else?‘high‘ ?end?from?salary?where?salary?is?not?null;?
?
其他函数
当前哪个库

select database();

当前哪个用户

select user();

?

存储过程

delimiter //

create?procedure?simproc(out?param1?int)?begin?select?100?into?param1;?end //
把100赋值给param1? 参数param1是传出参数
?
随机密码
?delimiter?$$

CREATE??PROCEDURE?rand_string1(n?INT)?
BEGIN
????DECLARE?chars_str?varchar(100)?DEFAULT?‘ [email?protected]#$%^*()<>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789‘;
????DECLARE?return_str?varchar(255)?DEFAULT?‘‘;
????DECLARE?i?INT?DEFAULT?0;
????WHILE?i?<?n?DO
????????SET?return_str?=?concat(return_str,substring(chars_str?,?FLOOR(1?+?RAND()*72?),1));
????????SET?i?=?i?+1;
????END?WHILE;
????SELECT?return_str;
END?$$
delimiter?;
存储过程,上层业务下沉,交由数据库处理,对数据库的性能消耗比较大,维护比较麻烦,不建议使用
?
视图

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读