MySQL数据库 -- 数据类型

                    

       今天呢,主要和大家讲数据库数据类型,数据类型本身也是一种约束,这就好比我们玩游戏制定规则一样,必须要执行。对于数据库学习呢,同时大量练习是必不可少的,在大厂面试中数据库也是问得比较多的一块知识。大厂实习,一起冲冲冲~

目录

数据类型分类

数值类型

tinyint

tinyint unsigned

bit 

int

小数类型

float

float unsigned 

decimal 

float和decimal之间的区别 

字符串类型

char

varchar

说明

char和varchar的比较 

日期和时间类型

更新数据update ... set ... 

enum 

set

集合查询使用find_ in_ set函数

总结


数据类型分类

数据库为什么要有数据类型呢?

1、数据也是一种约束

2、决定开辟空间的大小 

        数据库约束,只能插入对应数据类型特定的范围值!!数据本身就是一种约束,MySQL是直接和数据打交道,所以要遵守MySQL的规则。

数值类型

tinyint

我们从上面实验可以看出来,如果插入数据超过tinyint规定的范围,那么就插入失败了。 

tinyint unsigned

bit 

       这里bit(M),M表示比特位的位数(二进制),至于数据上限多大,根据二进制位数算出来的值即可。 

int

小数类型

float

float unsigned 

decimal 

float和decimal之间的区别 

flaot和decimal使用上没什么区别,但是他们之间精度是有区别的。

我们举个栗子:

所以,如果我们想要存储小数位精度比较高的数字,可以考虑使用decimal。 

字符串类型

char

我们使用char(L) 时,L表示字符个数,在这里,一个汉字、数字、字母都代表一个字符。

不要认为字符等价于字节。

varchar

varchar(L)中L表示字符个数,L的大小其实和具体编码有关。

说明

char和varchar的比较 

如何选择定长或变长字符串? 

1、如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5
2、如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。

定长变长字符串特点

1、定长的磁盘空间比较浪费,但是效率高。

2、变长的磁盘空间比较节省,但是效率低。
3、定长的意义是,直接开辟好对应的空间

4、变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少。

日期和时间类型

date:日期 'yyyy-mm-dd' ,占用三字节
datetime: 时间日期格式 'yyyy-mm-dd HH:ii:ss' 表示范围从 1000 到 9999 ,占用八字节
timestamp:时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字节

举个栗子:

更新数据update ... set ... 

enum 

enum:枚举,“单选”类型;
enum('选项1','选项2','选项3',...);
       该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,....最多65535个;当我们添加枚举值时,也可以添加对应的数字编号。

举个栗子:

        对于enum多个选择中只能选择一个,但是现实中存在多选的情况,显然只有enum是不行的,所以还需要有别的数据类型来支持:set。 

set

set:集合,“多选”类型;
set('选项值1','选项值2','选项值3', ...);
该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;而且出于效率考虑,这些值实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,4,8,16,32,.... 最多64个。

举个栗子:

注意:set在进行多选时,逗号后面不要加空格,否则就不对了。(上面例子有演示) 

当我们用数字插入时:

        虽说enum和set都支持数字插入,但是实际上我们不建议使用,因为这样的SQL语句代码可读性不高。 

集合查询使用find_ in_ set函数

      find_in_set(sub,str_list) :如果 sub 在 str_list 中,则返回下标;如果不在,返回0; str_list 用逗号分隔的字符串。

为什么要有find_in_set函数?对于下面的场景:

        假如我们查找的是所有人爱好中有游泳的人的信息,但是使用wher语句确实一种精确查找,只查找到了喜欢游泳的人信息。所以这显然是不符合我们的预期的。

所以要有fd_in_set函数来帮助我们查找集合关系的信息内容:

总结

数据类型本身就是一种约束:倒逼程序员规范操作数据!!

数据类型本身也是一种约束:给数据表中数据,提供极大的确定性!!

一旦你不满足我的条件,我直接终止你。 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值