zoukankan      html  css  js  c++  java
  • mysql之基本数据类型

    • mysql常用数据类型概览
    1. 数字:
        整型:tinyinit  smallint  mediumint  int  bigint
        小数:
            float :在位数比较短的情况下不精准
            double :在位数比较长的情况下不精准
                0.000001230123123123
                存成:0.000001230000
    
            decimal:(如果用小数,则用推荐使用decimal)
                精准
                内部原理是以字符串形式去存
    
    2. 字符串:
        char(10):存取速度快,浪费空间,
            root存成root000000
        varchar:精准,节省空间,存取速度慢
    
        sql优化:创建表时,定长的类型往前放,变长的往后放
                        比如性别           比如地址或描述信息
    
        >255个字符,超了就把文件路径存放到数据库中。
                比如图片,视频等找一个文件服务器,数据库中只存路径或url。
    
    3. 时间类型:
        datetime  date  time year等
    
    4. 枚举类型与集合类型
    	枚举: enum
        集合: set
    

    整型

    • 分类:TINYINT SMALLINT MEDIUMINT INT BIGINT
    • 作用:存储年龄,等级,id,各种号码等

    类型存储范围:参考图片:<>

    验证整型字段有无符号及范围

    create table t1(x tinyint);
    insert into t1 values(128),(-129);
    
    create table t2(x tinyint unsigned);
    insert into t2 values(-1),(256);  
    
    create table t3(x int unsigned);
    insert into t3 values(4294967296);
    

    疑问:类型后面的宽度能否改变字段存储的大小限制

    create table t4(x int(8));
    insert into t4 values(4294967296123);
    
    # 显示时,不够8位用0填充,如果超出8位则正常显示
    create table t5(x int(8) unsigned zerofill);
    insert into t5 values(4294967296123);
    
    # create table t6(id int(10) unsigned);
    # create table t7(id int(11));
    

    强调:对于整型来说,数据类型后的宽度并不是存储限制,而是显示限制,所以在创建表时,如果字段采用的是整型类型,完全无需指定显示宽度, 默认的显示宽度,足够显示完整当初存放的数据

    严格模式补充

    我们刚刚在上面设置了char,tinyint,存储数据时超过它们的最大存储长度,发现数据也能正常存储进去,只是mysql帮我们自动截取了最大长度。但在实际情况下,我们应该尽量减少数据库的操作,缓解数据库的压力,让它仅仅只管理数据即可,这样的情况下就需要设置安全模式

    show variables like "%mode%";  # 查看数据库配置中变量名包含mode的配置参数
    # 修改安全模式
    set session # 只在当前操作界面有效
    set global  # 全局有效
    
    set global sql_mode ='STRICT_TRANS_TABLES'
    # 修改完之后退出当前客户端重新登陆即可
    

    浮点型

    • 分类:FLOAT DOUBLE decimal
    • 应用场景:身高,体重,薪资

    字段限制特点(5,3)前一位表示所有的位数,后一位表示小数个数

    三者最大整数位和小数位对比:

    # 存储限制
    float(255,30)
    double(255,30)
    decimal(255,30)
    
    # 精确度验证
    create table t9(x float(255,30));
    create table t10(x double(255,30));
    create table t11(x decimal(65,30));
    
    insert into t9 values(1.111111111111111111111111111111);
    insert into t10 values(1.111111111111111111111111111111);
    insert into t11 values(1.111111111111111111111111111111);
    

    字符类型

    • 分类
      • char(定长)
      • varchar(变长)
    • 作用:姓名,地址,描述类信息
    create table t10(name char(4))  # 超出四个字符报错,不够四个字符空格补全
    create table t11(name varchar(4))  # 超出四个字符报错,不够四个有几个就存几个
    
    # 验证存储限制
    insert into t12 values('hello');
    insert into t13 values('hello');
    # 验证存储长度
    insert into t12 values('a'); #'a    '
    insert into t13 values('a'); #'a'
    select * from t12
    select * from t13  # 无法查看真正的结果
    
    select char_length(name) from t12
    select char_length(name) from t13  # 仍然无法查看到真正的结果
    
    """首先应该肯定的是在硬盘上存的绝对是真正的数据,但显示的时候mysql会自动将末尾的空格取掉"""
    # 如果不想让mysql帮你做自动去除末尾空格的操作,需要再添加一个模式
    set global sql_mode="strict_trans_tables,PAD_CHAR_TO_FULL_LENGTH";
    # 退出客户端重新登陆
    select char_length(x) from t12; #4
    select char_length(y) from t13; #1
    
    # 针对char类型,mysql在存储时会将数据用空格补全存放到硬盘中。但是会在读出结果的时候自动取掉末尾的空格
    
    """
    char与varchar的使用区别
    """
    name char(5)
    # 缺点:浪费空间
    # 优点:存取速度都快
    陈二 alex lxx  jxx  txx  
    
    name varchar(5)
    # 缺点:存取速度慢
    # 优点:节省空间
    1bytes+陈二 1bytes+alex 1bytes+lxx  1bytes+jxx  1bytes+txx 
    

    时间类型

    • 分类

      • date:2019-05-01
      • time:11:11:11
      • Datetime: 2019-01-02 11:11:11
      • Year:2019
    • 测试

      create table student(
      	id int,
        name char(16),
        born_year year,
        birth date,
        study_time time,
        reg_time datetime
      );
      insert into student values(1,'陈二','2019','2019-05-09','11:11:00','2019-11-11 11:11:11');
      

    枚举与集合类型

    • 分类

      • 枚举enum 多选一
      • 集合set 多选多
    • 测试

      create table user(
      	id int,
        name char(16),
        gender enum('male','female','others')
      );
      insert into user values(1,'刘大','xxx')  # 报错
      insert into user values(2,'陈二','female')  # 正确!
      
      
      create table teacher(
      	id int,
        name char(16),
        gender enum('male','female','others'),
        hobby set('read','sleep','sanna','dbj')
      );
      insert into teacher values(1,'陈二','male','read,sleep,dbj')  # 集合也可以只存一个
      

  • 相关阅读:
    CS224n, lec 10, NMT & Seq2Seq Attn
    CS231n笔记 Lecture 11, Detection and Segmentation
    CS231n笔记 Lecture 10, Recurrent Neural Networks
    CS231n笔记 Lecture 9, CNN Architectures
    CS231n笔记 Lecture 8, Deep Learning Software
    CS231n笔记 Lecture 7, Training Neural Networks, Part 2
    pytorch坑点排雷
    Sorry, Ubuntu 17.10 has experienced an internal error
    VSCode配置python插件
    tmux配置与使用
  • 原文地址:https://www.cnblogs.com/penghengshan/p/10875828.html
Copyright © 2011-2022 走看看