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

    基本数据类型

    整型

    • 分类

      TINYINT SMALLINT MEDUIMINT INT BIGINT

    • 作用

      存储年龄、等级、id、号码等等

    """
    以TINYINT 
    	是否有符号
    		默认情况下是带符号的
    	超出会如何
    		超出限制只存最大可接受值
    """
    create table t9(id tinyint);
    insert into t9 values(-129),(256);
    
    # 约束条件之unsigned 无符号
    create table t10(id tinyint unsigned);
    
    
    create table t11(id int);
    # int默认也是带符号的  
    # 整型默认情况下都是带有符号的
    
    # 针对整型 括号内的宽度到底是干嘛的
    create table t12(id int(8));
    insert into t12 values(123456789);
    
    """
    特例:只有整型括号里面的数字不是表示限制位数
    id int(8)
    	如果数字没有超出8位 那么默认用空格填充至8位
    	如果数字超出了8位 那么有几位就存几位(但是还是要遵守最大范围)
    """
    create table t13(id int(8) unsigned zerofill);
    # 用0填充至8位
    
    # 总结:
    针对整型字段 括号内无需指定宽度 因为它默认的宽度以及足够显示所有的数据了
    

    严格模式

    # 如何查看严格模式
    show variables like "%mode";
    
    模糊匹配/查询
    	关键字 like
    		%:匹配任意多个字符
            _:匹配任意单个字符
    
    # 修改严格模式
    	set session  只在当前窗口有效
        set global   全局有效
        
        set global sql_mode = 'STRICT_TRANS_TABLES';
        
        修改完之后 重新进入服务端即可
    

    浮点型

    • 分类

      FLOAT、DOUBLE、DECIMAL

    • 作用

      身高、体重、薪资

      # 存储限制
      float(255,30)  # 总共255位 小数部分占30位
      double(255,30)  # 总共255位 小数部分占30位
      decimal(65,30)  # 总共65位 小数部分占30位
      
      # 精确度验证
      create table t15(id float(255,30));
      create table t16(id double(255,30));
      create table t17(id decimal(65,30));
      """你们在前期不要给我用反向键 所有的命令全部手敲!!!增加熟练度"""
      
      insert into t15 values(1.111111111111111111111111111111);
      insert into t16 values(1.111111111111111111111111111111);
      insert into t17 values(1.111111111111111111111111111111);
      
      float < double < decimal
      # 要结合实际应用场景 三者都能使用
      

    字符类型

    • 分类

      """
      char
      	定长
      	char(4)	 数据超过四个字符直接报错 不够四个字符空格补全
      varchar
      	变长
      	varchar(4)  数据超过四个字符直接报错 不够有几个存几个
      """
      create table t18(name char(4));
      create table t19(name varchar(4));
      
      insert into t18 values('a');
      insert into t19 values('a');
      
      # 介绍一个小方法 char_length统计字段长度
      select char_length(name) from t18;
      select char_length(name) from t19;
      """
      首先可以肯定的是 char硬盘上存的绝对是真正的数据 带有空格的
      但是在显示的时候MySQL会自动将多余的空格剔除
      """
      
      # 再次修改sql_mode 让MySQL不要做自动剔除操作
      set global sql_mode = 'STRICT_TRANS_TABLES,PAD_CHAR_TO_FULL_LENGTH';
      

      char与varchar对比

      """
      char
      	缺点:浪费空间
      	优点:存取都很简单
      		直接按照固定的字符存取数据即可
      		jason egon alex wusir tank 
      		存按照五个字符存 取也直接按照五个字符取
      		
      varchar
      	优点:节省空间
      	缺点:存取较为麻烦
      		1bytes+jason 1bytes+egon 1bytes+alex 1bytes+tank 
      		
      		存的时候需要制作报头
      		取的时候也需要先读取报头 之后才能读取真实数据
      		
      以前基本上都是用的char 其实现在用varchar的也挺多
      """
      
      补充:
          进来公司之后你完全不需要考虑字段类型和字段名
          因为产品经理给你发的邮件上已经全部指明了
      

    时间类型

    • 分类

      date:年月日 2020-5-4

      datetime:年月日时分秒 2020-5-4 11:11:11

      time:时分秒11:11:11

      Year:2020

      create table student(
      	id int,
          name varchar(16),
          born_year year,
          birth date,
          study_time time,
          reg_time datetime
      );
      insert into student values(1,'egon','1880','1880-11-11','11:11:11','2020-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,'jason','male');  正常
      insert into user values(2,'egon','xxxxooo');  报错
      # 枚举字段 后期在存数据的时候只能从枚举里面选择一个存储 
      
      
      create table teacher(
      	id int,
          name char(16),
          gender enum('male','female','others'),
          hobby set('read','DBJ','hecha')
      );
      insert into teacher values(1,'jason','male','read');  正常
      insert into teacher values(2,'egon','female','DBJ,hecha');  正常
      insert into teacher values(3,'tank','others','生蚝'); 报错
      # 集合可以只写一个  但是不能写没有列举的
      

      总结

      """
      字段类型
      严格模式
      
      约束条件
      	not null
      	zerofill
      	unsigned
      """
      
  • 相关阅读:
    176. Second Highest Salary
    175. Combine Two Tables
    172. Factorial Trailing Zeroes
    171. Excel Sheet Column Number
    169. Majority Element
    168. Excel Sheet Column Title
    167. Two Sum II
    160. Intersection of Two Linked Lists
    个人博客记录
    <meta>标签
  • 原文地址:https://www.cnblogs.com/linqiaobao/p/12828469.html
Copyright © 2011-2022 走看看