• 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函数来帮助我们查找集合关系的信息内容:

    总结

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

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

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

  • 相关阅读:
    有趣的 scanf()
    Programming abstractions in C阅读笔记:p161-p165
    C++ 有效的独数
    微服务治理新篇章:Eureka中细粒度策略管理实现
    【云原生】K8S master节点更换IP以及master高可用故障模拟测试
    [开源]多功能、高效率、低代码的前后端一体化、智能化的开发工具
    SpringCloud-Nacos
    Windows系统服务器配置SSH服务
    如何使用 Xcode 13+ 新的列断点(Column Breakpoints)让中断位置更加精确制导
    zero_damaged_pages 隐含参数,处理磁盘页损坏(先占位)
  • 原文地址:https://blog.csdn.net/qq_58724706/article/details/127733902