zoukankan      html  css  js  c++  java
  • MySql学习

    MySql学习笔记

    MySQL数据库存储引擎

    • MyISM:MyISAM存储引擎:不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有
      要求或者以select,insert为主的应用基本上可以用这个引擎来创建表
    • InnoDB:支持事务
    • Memory:Memory存储引擎使用存在于内存中的内容来创建表。每个memory表只实际对应一个磁盘文件,格式是.frm。memory类型的表访问非常的快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。
    • Merge:Merge存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的。

    MyISM和InnoDB的区别

    • InnoDB支持事务,而MyISM不支持事务
    • InnoDB支持行级锁,而MyISM支持表级锁
    • InnoDB支持外键,而MyISM不支持
    • InnoDB支持全文索引,而MyISM不支持
    • InnoDB是索引组织表,MyISM是堆表 (堆表的数据是随机插入的,索引组织表的数据是有序的)

    MySQL中char和varchar的区别

     char10):简单粗暴,浪费空间,存取速度快   root存成root000000
    会保存固定的长度,不足会用空格补足
    
     varchar:精准,节省空间,存取速度慢
     是什么就存什么

    int类型存储

    int存储4字节,最小值-2147483648,最大值21477483647

    主键特征

    非空而且唯一

    inner join、left join、right join、full join

    inner join 保留符合条件的数据
    left join 优先保留左表数据
    right join 优先保留右表数据
    full join 合并两张表的数据

    concat, group_concat函数

    concat 将多个字符串连接成一个字符串
    group_concat 对group by后的数据用逗号拼接在一起

    事务

    事务指的是多个sql组成一个事务,有一个sql异常,整个事务回滚

    索引

    索引指的是用来保存数据查找算法的一种数据结果
    优点:
    1. 加快数据的查找速度,减少IO操作
    2. 通过索引对数据进行排序,降低了数据排序的成本,降低了CPU的利用率;
    缺点:
    1. 索引实际上也是一张表,索引会占用一定的存储空间;
    2. 更新数据表的数据时,需要同时维护索引表,因此,会降低insert、update、delete的速度

    什么情况需要建索引

    1. 主键自动创建唯一非空索引;
    2. 频繁作为查询条件的字段应该创建索引;
    3. 频繁更新的字段不适合简历索引,因为每次更新不仅仅更新数据表同时还会更新索引表;
    4. 查询中经常排序的字段,可以考虑创建索引;
    5. 如果某个字段的重复数据较多,不适合创建普通索引;

    ACID

    ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

    存储过程

    存储过程包含了一系列可执行的sql语句,存储过程存放于MySQL中,通过调用它的名字可以执行其内部的一堆sql

    视图

    视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用

    SQL的执行计划

    生成的方法很简单在相应的select前面加explain即可

    MySql的数据类型

    数字:
    整型:tinyinit int bigint
    小数:
    float :在位数比较短的情况下不精准
    double :在位数比较长的情况下不精准
    0.000001230123123123
    存成:0.000001230000
    decimal:(如果用小数,则用推荐使用decimal)精准内部原理是以字符串形式去存
    char(10):简单粗暴,浪费空间,存取速度快
    varchar:精准,节省空间,存取速度慢
    时间类型:
    最常用:datetime
    枚举类型与集合类型

    hash索引和B+树索引

    哈希索引基于哈希表实现,只有精确匹配索引的所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码,哈希码是一个较小的值,并且不同键值的行计算出来的哈希码也不一样。哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。也就是说,由于哈希查找比起B-Tree索引,其本身对于单行查询的时间复杂度更低,有了哈希索引后明显可加快单行查询速度。
    
    但是哈希索引也有它自己的限制:
    哈希索引只包含哈希值和行指针,而不存储字段值,所以不能使用索引中的值来避免读取行。不过,访问内存中的行的速度很快,所以大部分情况下这一点对性能的影响并不明显。
    哈希索引数据并不是按照索引值顺序存储的,所以也就无法用于排序。
    哈希索引也不支持部分索引列匹配查找,因为哈希索引始终是使用索引列的全部内容来计算哈希值的。例如,在数据列(A, B)上建立哈希索引,如果查询只有数据列A,则无法使用该索引。
    哈希索引只支持等值比较查询,包括=in()、<=>。不支持任何范围查询,例如where price > 100。
    访问哈希索引的数据非常快,除非有很多哈希冲突。如果哈希冲突很多的话,一些索引维护操作的代价也很高。
    
    B+树索引是B树索引的变体,本质上也是多路平衡查找树

    数据备份类型

    1. 完全备份:这是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但它需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。
    2. 事务日志备份    事务日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。为了使数据库具有鲁棒性,推荐每小时甚至更频繁的备份事务日志。
    3. 差异备份    也叫增量备份。它是只备份数据库一部分的另一种方法,它不使用事务日志,相反,它使用整个数据库的一种新映象。它比最初的完全备份小,因为它只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。推荐每天做一次差异备份。
    4. 文件备份    数据库可以由硬盘上的许多文件构成。如果这个数据库非常大,并且一个晚上也不能将它备份完,那么可以使用文件备份每晚备份数据库的一部分。由于一般情况下数据库不会大到必须使用多个文件存储,所以这种备份不是很常用
  • 相关阅读:
    深刻剖析spring三种注入方式以及使用注解的原理
    springcloud(一):大话Spring Cloud
    springcloud学习资料汇总
    springboot(一):入门篇
    springboot学习资料汇总
    jvm系列(七):如何优化Java GC「译」
    jvm系列(六):Java服务GC参数调优案例
    jvm系列(五):Java GC 分析
    jvm系列(四):jvm调优-命令篇
    android view、viewgroup 事件响应拦截处理机制
  • 原文地址:https://www.cnblogs.com/zhanghongke/p/9890848.html
Copyright © 2011-2022 走看看