zoukankan      html  css  js  c++  java
  • 04-MySQL中的数据类型

    1 整体说明
    MYsql的数据类型
    #1. 数字:
        整型:tinyint  int  bigint
        小数:
            float :在位数比较短的情况下不精准
            double :在位数比较长的情况下不精准
                0.000001230123123123
                存成:0.000001230000

            decimal:(如果用小数,则用推荐使用decimal)
                精准
                内部原理是以字符串形式去存

    #2. 字符串:
        char(10):简单粗暴,浪费空间,存取速度快
                root存成root000000
        varchar:精准,节省空间,存取速度慢

        sql优化:创建表时,定长的类型往前放,变长的往后放
                        比如性别           比如地址或描述信息

        >255个字符,超了就把文件路径存放到数据库中。
                比如图片,视频等找一个文件服务器,数据库中只存路径或url。


    #3. 时间类型:
        最常用:datetime


    #4. 枚举类型与集合类型
       enum 和set

    2 数值类型
    整型类型:TINYINT SMALLINT MEDIUMINT INT BIGINT
    作用:存储年龄、等级、id、各种号码等。
    说明:
    (1)默认是有符号的
    (2)定义无符号的数据类型:
    unsigned :表示无符号  当前字段添加约束
    示例:create table t2(x int unsigned);
    (3)该类型指定宽度时,仅仅只是指定查询结果的显示宽度,与存储范围无关(默认的显示宽度,都是在最大值的基础上加1),存储范围如下
    (4)为什么int类型默认显示宽度为11
       int的存储宽度是4个Bytes,即32个bit,即2**32

        无符号最大值为:4294967296-1

        有符号最大值:2147483648-1

        有符号和无符号的最大数字需要的显示宽度均为10,而针对有符号的最小值则需要11位才能显示完全,所以int类型默认的显示宽度为11是非常合理的

    ========================================
            tinyint[(m)] [unsigned] [zerofill]

                小整数,数据类型用于保存一些范围的整数数值范围:
                有符号:
                    -128 ~ 127
                无符号:
                    0 ~ 255

                PS: MySQL中无布尔值,使用tinyint(1)构造。
    ========================================
            int[(m)][unsigned][zerofill]

                整数,数据类型用于保存一些范围的整数数值范围:
                有符号:
                        -2147483648 ~ 2147483647
                无符号:
                        0 ~ 4294967295
    ========================================
            bigint[(m)][unsigned][zerofill]
                大整数,数据类型用于保存一些范围的整数数值范围:
                有符号:
                        -9223372036854775808 ~ 9223372036854775807
                无符号:
                        0  ~  18446744073709551615

    3. 浮点型
    (1)定点数类型: DEC等同于DECIMAL

    (2)浮点类型:FLOAT DOUBLE

    (3)作用:存储薪资、身高、体重、体质参数等
    -------------------------FLOAT-------------------
    FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]
    #参数解释:单精度浮点数(非准确小数值),M是全长,D是小数点后个数。M最大值为255,D最大值为30

    #有符号:
               -3.402823466E+38 to -1.175494351E-38,
               1.175494351E-38 to 3.402823466E+38

    #无符号:
               1.175494351E-38 to 3.402823466E+38
    #精确度:
               **** 随着小数的增多,精度变得不准确 ****


     -------------------------DOUBLE-----------------------
    DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

    #参数解释: 双精度浮点数(非准确小数值),M是全长,D是小数点后个数。M最大值为255,D最大值为30

    #有符号:
               -1.7976931348623157E+308 to -2.2250738585072014E-308
               2.2250738585072014E-308 to 1.7976931348623157E+308

    #无符号:
               2.2250738585072014E-308 to 1.7976931348623157E+308

    #精确度:
               ****随着小数的增多,精度比float要高,但也会变得不准确 ****

    ======================================
    --------------------DECIMAL------------------------
    decimal[(m[,d])] [unsigned] [zerofill]

    #参数解释:准确的小数值,M是整数部分总个数(负号不算),D是小数点后个数。 M最大值为65,D最大值为30。


    #精确度:
               **** 随着小数的增多,精度始终准确 ****
               对于精确数值计算时需要用此类型
               decaimal能够存储精确值的原因在于其内部按照字符串存储。

    4 日期类型
    (1)类型:DATE TIME DATETIME TIMESTAMP YEAR
    (2)作用:存储用户注册时间,文章发布时间,员工入职时间,出生时间,过期时间等
    (3)语法:
            YEAR
                YYYY(1901/2155)

            DATE
                YYYY-MM-DD(1000-01-01/9999-12-31)

            TIME
                HH:MM:SS('-838:59:59'/'838:59:59')

            DATETIME

                YYYY-MM-DD HH:MM:SS(1000-01-01 00:00:00/9999-12-31 23:59:59    Y)

            TIMESTAMP

                YYYYMMDD HHMMSS(1970-01-01 00:00:00/2037 年某时)

    (4)datatime和timestamp的区别

        在实际应用的很多场景中,MySQL的这两种日期类型都能够满足我们的需要,存储精度都为秒,但在某些情况下,会展现出他们各自的优劣。
        下面就来总结一下两种日期类型的区别。

        1.DATETIME的日期范围是1001——9999年,TIMESTAMP的时间范围是1970——2038年。

        2.DATETIME存储时间与时区无关,TIMESTAMP存储时间与时区有关,显示的值也依赖于时区。在mysql服务器,
        操作系统以及客户端连接都有时区的设置。

        3.DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。

        4.DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),
        如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。

    5 枚举和集合
            create table consumer(
                      id int,
                      name varchar(50),
                      sex enum('male','female','other'),
                      level enum('vip1','vip2','vip3','vip4'),#在指定范围内,多选一
                      fav set('play','music','read','study') #在指定范围内,多选一和多选多
                    );
            insert into consumer values (1,'alex','other','vip2','play,read,study');

  • 相关阅读:
    CDH5.13 集成Kerberos配置
    使用bash脚本删除文件最后几行
    yolov3模型微调(fine-tune)备忘
    ubuntu 18.04 rsync 命令使用 服务端配置
    python 子包调用 跨目录调用
    [转]命令行界面 (CLI)、终端 (Terminal)、Shell、TTY的联系与区别
    bash shell 判断变量是否在列表中
    TensorFlow 图像分类模型 inception_resnet_v2 模型导出、冻结与使用
    numpy 数组集合运算及下标操作
    Win10 Service'MongoDB Server' failed to start. Verify that you have sufficient privileges to start system services【简记】
  • 原文地址:https://www.cnblogs.com/mayugang/p/10222817.html
Copyright © 2011-2022 走看看