MySql常用知识

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

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

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

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

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

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

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值