• 数据库MySQL 存储引擎数据类型


    一.存储引擎

    日常生活中文件格式有很多中,并且针对不同的文件格式会有对应不同存储方式和处理机制(txt,pdf,word,mp4...)

    针对不同的数据应该有对应的不同的处理机制来存储

    存储引擎就是不同的处理机制

    MySQL主要存储引擎

    • Innodb

      是MySQL5.5版本及之后默认的存储引擎

      存储数据更加的安全

    • myisam

      是MySQL5.5版本之前默认的存储引擎

      速度要比Innodb更快 但是我们更加注重的是数据的安全

    • memory

      内存引擎(数据全部存放在内存中) 断电数据丢失

    • blackhole

      无论存什么,都立刻消失(黑洞)

    1.5、查看所有引擎

      show engines

    1.6、不同引擎在存储表中的不同点

      create table t1(id int)engine=innodb;

      create table t2(id int)engine=myisam;

      create table t3(id int)engine=memory;

      create table t4 (id int)engine=Blackhole;

    1.7、存数据

      insert table t1 values(1);

      insert table t2 values(2);

      insert table t3 values(3);

      insert table t4 values(4);

    二、创建表的完整语法

    2.1、创建表的语法

      create table 表名(

          字段名1 类型(宽度)约束条件,

          字段名2 类型(宽度)约束条件

          字段名3 类型(宽度)约束条件)

    2.2、创建表的要求

      1.在同一张表中字段名不能重复

      2.宽度和约束条件是可选的,可写可不写,字段名和字段类型是必须要写的

      3.同一个字段名可以携带多个约束条件,中间使用空格间隔开

      4.最后一行不能有逗号,否则会报错

    2.3、创建表中的宽度

      宽度:一般情况下指的是对存储数据的限制,

         默认情况下为1,存数据时只会为一个字节,当存的数据为null时,等同于空

         create table t1 (name char);

         insert into t1 values(null);关键字null

      MySQL5.6版本默认没有开启严格模式,规定只能存一个字符,如果给了多个字符,就会直接取截,剩下一个

      MySQL5.7版本之后开启严格模式,一旦超过规定字符就会直接报错

      使用数据库的原则:

        能尽量少给数据库干活,就不要给数据库加活

    2.4、约束条件

      约束条件:null

      not null 不能插入null

      create table t1(id int,name char not null);

    2.5、宽度和约束条件的关系

      宽度是用来限制数据的储存

      约束条件是在宽度的基础上添加而外的约束

    三、严格模式

    3.1、怎么查看严格模式

      show variables like “%mode”;

    3.2、模糊匹配/查询

        关键字 like

           %:匹配任意多个字符

           _:匹配任意单个字符

    3.3、修改严格模式

      set session 只在当前窗口有效

      set global 全局有效

      get global sql_mode = ‘STRICT_TRANS_TABLES’;

      修改以后需要重新进入服务端

    二.数据类型

    1.整型

    作用:存储年龄、等级、id、等整数

    有 TINYINT SMALLINT MEDUIMINT INT BIGINT

    以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位
    
    # 总结:
    针对整型字段 括号内无需指定宽度 因为它默认的宽度以及足够显示所有的数据了
    

      

    2.浮点型

    作用:存储身高,工资等带小数的数据

    # 存储限制
    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
    # 要结合实际应用场景 三者都能使用
    

      

    3.字符类型(重点)

    在各种数据类型中用的最多

    作用:存储字符串类型

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

      

    4.日期类型

    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');
    

      

    5.枚举与集合类型

    枚举(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','生蚝'); 报错
    # 集合可以只写一个  但是不能写没有列举的
    

      

  • 相关阅读:
    poj 3528 (三维几何求凸包+凸包表面积)
    dijkstra模板(好像是斐波那契额堆优化,但我为什么看起来像优先队列优化,和spfa一样)
    最大空凸包模板
    ICPC 2017–2018, NEERC, Northern Subregional Contest St Petersburg, November 4, 2017 I题
    hdu 5248 序列变换
    hdu 2063(二分图模板测试)
    组合数
    85. Maximal Rectangle 由1拼出的最大矩形
    750. Number Of Corner Rectangles四周是点的矩形个数
    801. Minimum Swaps To Make Sequences Increasing 为使两个数组严格递增,所需要的最小交换次数
  • 原文地址:https://www.cnblogs.com/Tornadoes-Destroy-Parking-Lots/p/12828230.html
Copyright © 2020-2023  润新知