MySql常用知识

  1. MySql索引
    想学习好数据库,对数据库的查询想掌握特别深的话,这是必须知道,也是必须学的。

    1. hash索引:
      它的底层使用的是hash表(原理这里就不说了),主有Memory存储引擎显示支持Hash索引,它也是Memory表的默认索引类型,它页可以使用B+树索引。(过多就不详细说了,我也不太了解)
    2. B+树索引
      B+树大家都知道吧(不知道的话,可以在网上搜搜,懂原理就行,实现起来困难非常大,小编以前尝试过,最终还是放弃了)。Mysql中用的最多的两个存储引擎InnoDB和MyISAM,它们两个底层使用最频繁的索引就是B+树。
      它们两个(指InnoDB和MyISAM,以下出现它们两个都是指InnoDB和MyISAM)用B+树的特性,所有数据都在叶子节点上,增加了顺序访问指针,每个叶子节点都有指向相邻叶子节点的指针。主要是为了提高区间查询的效率。
  2. MyISAM存储引擎和InnoDB存储引擎的区别

    1. MyISAM不支持事务,InnoBD支持,它都会把每一条SQL语言都默认封装成事务,自动提交,这样会影响速度,可以使用多条SQL语句放在begin和commit之间,组成一个事务提交
    2. MyISAM不支持表锁设计,InnoDB支持,主要是表共享读锁和表独占写锁(这个区别可以参考以后我写的博客)
    3. MyISAM支持全文索引、并保存这个表的行数,而InnoDB不支持,前者查询效率要高一些。
    4. InnoDB支持外键,而MyISAM不支。对有外键的InnoDB表转为MyISAM会失败
    5. InnoDB是聚集索引,数据文件和索引绑在一起,必须的时候是要有主键,通过主键索引效率会很高。但是辅助索引需要两次查询,先查询到主键,然后通过主键查询到数据。因此,主键不应该过大,因为主键太大,其他索引也都会很大。而MyISAM是非聚集索引,数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引是独立的。
    6. InnoDB不保存表的具体行数,执行查询行数时需要对表进行扫描,而MyISAM用一个变量保存了整个表的行数,执行查询行数只需独处变量即可,速度非常快。
  3. 常见的索引

    1. 主键索引(PRIMARY_KEY):它是一种特殊的唯一索引,不允许有空值,也是我们通常用的主键。
    2. 唯一索引(UNIQUE):它与“普通索引”类似,不同的就是索引列的值必须唯一,但允许有空值。
    3. 普通索引(INDEX):最基本的索引,没有任何限制。
    4. 全文索引(FULLTEXT):仅用于MyISAM表,针对较大的数据,生成全文索引很耗时很耗空间。
    5. 组合索引INDEX:为了更多提高MySql效率可建立组合索引,遵循“最左前缀”原则(指的是查询的时候必须包括建立索引时最左端元素)。
  4. 选择索引的数据类型

    1. 越小的数据类型通常会更好,它们的数据类型通常在磁盘、内存和CPU缓存中都需要更小的空间,处理起来快一些。
    2. 简单的数据类型更好:整型数据比起字符,处理开销更小,字符串的比较更复杂。整型通常是作为标识符最好的选择,它处理起来更快,而且可以设置为自增(AUTO_INCREMENT)。尽量避免使用字符串作为标识符,它消耗更多的空间,处理起来也比较慢。
    3. 避免NULL,应指定列为NOT NULL。
  5. 几种连接查询

    1. 左连接:left join 或 left outer join,查询的时候把左表的元素全部查询出来,右边多了删,少了补null
    2. 右连接:right join 或 right outer join,与上面相反。
    3. 内连接:join 或 inner join , 查询的时候以左右表为参照,左边多了删左边,右边多了删右边。
    4. 交叉连接:cross join,使用的是笛卡尔集,所有组合都会出现。
  6. 三大范式

    1. 第一范式之无重复列:这是最基本的要求,就是说所有的列中不能重复。
    2. 第二范式之属性完全依赖于主键,这里说到了外键,每个属性必须要完全或者简介依赖于主键,比如家庭:你和你媳妇,你的爸爸主要依赖于你,单你的媳妇爸爸直接依赖于你媳妇,这就不满足,必须设计成你和你媳妇两张表。
    3. 第三范式之属性完全依赖于主键,比如你和你女儿,你女儿属于你,你女儿的礼物是直接属于你的女儿,所以要分开建两张表。
      必须满足这些,第二范式必须先满足第一范式,范式越高,外加要求就越多,越往后的范式必须之前它前面所有的范式。
  7. 数据库事务正确执行的四个基本要点

    1. 原子性:整个事务中的所有操作,要么是全部完成,要么是全部不完成。(这个在Java中也挺重要的)
    2. 一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
    3. 隔离性:隔离状态执行事务,使它们好像是系统给定时间内执行的唯一操作。通俗的将就是多个事务之间不互相干扰(类似于多线程)
    4. 持久性:在事务完成以后,该事务所对数据库的更改将持久保存在数据库中,不会被回滚。

如何觉得能帮助你,麻烦给作者一份信任,让作者能写下去的理由,不需要你给的太多,只需1块钱即可。

在这里插入图片描述
在这里插入图片描述

如果作者写的有误或者想和作者分享更多,请添加作者微信,邀你进群需收10块钱群费。收钱的目的在于我们来着是学知识的,不是来着观望的

在这里插入图片描述

你可能感兴趣的:(数据库)