• MySQL进阶part1


    存储引擎

    日常生活中的文件格式很多,在应对不同格式的文件格式时会有不同的存储方式和处理机制(存储引擎)

    MySQL的主要存贮引擎
    • Innodb

      是MySQL5.5版本之后的默认存储引擎相对myisam更加的安全

    • myisam

      是MySQL5.5版本之前的默认存储引擎相对Innodb更加的快

    • memory

      内存引擎(数据存放在内存之中)——断电丢失

    • blackhole

      黑洞引擎——无论存什么,都立马消失

    # 查看所有的存储引擎
    show engines;

    # 如何使用不同的引擎存储表
    create table t1(id int) engine=innodb;
    create table t2(id int) engine=myisam;
    create table t3(id int) engine=blackhole;
    create table t4(id int) engine=memory;

    # 验证
    insert into t1 values(1);
    insert into t2 values(2);
    insert into t3 values(3);
    insert into t4 values(4);

    创建表的完整语法

    create table 表名(
    字段1 类型(宽度) 约束条件,
    字段2 类型(宽度) 约束条件,
    字段3 类型(宽度) 约束条件
    )

    ps:
    1.同一张表内字段名不可重复
    2.宽度和约束条件可写可不写 但是字段名和字段类型是必须的
    3.最后一行不可以写逗号
    宽度

    一般清空下指的是对存储数据的限制

    create table t7(name char);默认宽度1
    insert into t7 value('jake');
    insert into t7 value('rose');

    不同的版本会有不同的效果
    5.6版本是没有默认开启严格模式的,规定只能存一个字符,假如你输入了多个,会自动截取
    5.7及以上的版本默认开启严格模式,规定存几个就存几个,一旦超出就报错
    ps:使用数据库的准则:尽量减少数据库的工作,不要给数据库增加压力。

    基本数据类型

    整型

    • 分类

      TINYINT SMALLINT MEDUIMINT INT BIGINT

    • 作用

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

    以TINYINT为例
    1.默认带符号
    2.超出限制后只存最大可接收的值
    create table t9(id tinyint);
    insert into t9 value(-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与vachar

    char:占用空间多但是存取简单

    vachar:节省空间但是存取麻烦——需要报头

    时间类型

    • 分类

    data:年月日 2020-5-4

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

    time:时分秒 11:11:11

    year:2020

    create table student(
    id int,
    name vachar(16),
    born_year year,
    birth data,
    star_time time,
    reg_time datatime
    );
    insert into student values(1,'jake','1990','1990-8-8','11:11:11','2020-5-4 11:11:11');

    枚举与集合类型

    • 分类

      enum 多选一

      set 多选多

    • 使用

    create table user(
    id int,
    name char(16),
    gender enum('famale','male')
    );
    insert into user values(1,'jake','male'); # ok
    insert into user values(2,'rose','女'); # 报错
    create table student(
    id int,
    name char(16),
    hobby set('read','eat','sleep')
    );
    insert into student values(1,'jake','read,eat'); # ok
    insert into student values(2,'rose','吃饭');

    1588595433877


  • 相关阅读:
    【线程控制:线程休眠】
    【线程调度-优先级】
    【多线程实现方案一:继承Thread 类】
    【多线程概述】
    【使用Mybatis-Generator自动生成Mapper、Model、Mapping相关文件】
    【springmvc集成mybatis框架】
    【UltraISO制作centos7系统安装盘】
    【己有原码, 为何还有反码和补码?】
    【原码, 反码, 补码的基础概念和计算方法】
    【数据类型】
  • 原文地址:https://www.cnblogs.com/bailongcaptain/p/12828101.html
Copyright © 2020-2023  润新知