MySql数据库知识点整理


学习内容:

  1. 数据库存储引擎
  2. 索引
  3. 范式
  4. 事务

知识点:

1.数据库存储引擎是什么?
  • 数据库底层软件组织
  • 用于数据库管理系统的增删改查操作
  • 不同的存储引擎提供不同的存储机制,索引技巧,锁定水平等功能
2.常见的存储引擎?
  • InnoDB:低层为B+树,每个节点对应一个page(16k),非叶子节点存键值,叶子节点存数据。
  • MyISAM:MySql默认存储引擎,不提供事务支持,不支持行级锁和外键,采用表锁,插入和更新数据效率低,但读取数据速度快。
  • TokuDB: 低层为分形树(与B+树类似),每个孩子指针除了指向一个孩子节点外还带有一个Message Buffer, Message Buffer为一个先入先出的队列用于缓存更新操作。
    例如:一次操作只需要落在某节点Message Buffer就可以马上返回,并不需要搜索到子节点,这些缓存的更新会在查询时或后台异步合并应用到对应的节点中。
  • Memory:其使用存储在内存中的内容来创建表,而且所有数据也放在内存中。访问速率快,默认使用HASH索引。但是一旦服务器关掉,表中数据就会丢失。
3.InnoDB和MyISAM的区别?
InnoDBMyISAM
事务支持不支持
外键支持不支持
表,行级锁表锁
全文索引不支持 (5.7以后的InnoDB支持全文索引)支持 (在涉及全文索引领域的查询效率上MyISAM速度更快高)
聚集索引InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的,InnoDB的B+树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的。MyISAM的B+树主键索引和辅助索引的叶子节点都是数据文件的地址指针。
查询行数InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。InnoDB不保存表的具体行数,执行select count(*) from table时需要全表扫描。
其他InnoDB表必须有唯一索引(如主键)(用户没有指定的话会自己找/生产一个隐藏列Row_id来充当默认主键Myisam可以没有
4.如何选择InnoDB和MyISAM?
  1. 是否要支持事务,如果要请选择innodb,如果不需要可以考虑MyISAM;
  2. 如果表中绝大多数都只是读查询,可以考虑MyISAM,如果既有读也有写,请使用InnoDB。
  3. 系统奔溃后,MyISAM恢复起来更困难,能否接受;
  4. MySQL5.5版本开始Innodb已经成为Mysql的默认引擎(之前是MyISAM)。
5.什么是索引?
  1. 帮助数据库快速获取数据的数据结构。索引是对数据表中一个或多个列的值进行排序的结构,建立索引有助于快速获取信息。
6.mysql中的四种索引?
  • 主键索引
  • 唯一索引
  • 普通索引
  • 全文索引
7.建索引的几大原则
  1. 最左前缀匹配原则,mysql优先匹配左边的索引,重要的索引放左边。
  2. 尽量选择区分度高的列作为索引
  3. 为常作为查询条件的字段建立索引
  4. 为经常需要排序、分组和联合操作的字段建立索引
  5. 尽量的扩展索引,不要新建索引
  6. 限制索引的数目,索引越多更新表花费的时间越长
  7. 尽量使用数据量少的索引
  8. 如果索引字段的值很长,最好使用值的前缀来索引。例如,TEXT和BLOG类型的字段,进行全文检索会很浪费时间。如果只检索字段的前面的若干个字符,这样可以提高检索速度。
  9. 删除不再使用或者很少使用的索引
8.数据库的三范式
  1. 第一范式:列不可分
  2. 第二范式:行可以唯一区分,主键约束,一张表只描述一件事
  3. 第三范式:表中非主属性不能依赖与其他表的非主属性,外键约束
  4. 三大范式一级一级依赖
9.事务的四大特性
  1. 原子性:是指事务是一个不可分割的工作单元,事务中的操作要么都发生,要么都不发生。
  2. 一致性:是指事务前后数据的完整性要保持一致。
  3. 隔离性:是指是指多个用户并发访问数据库的时候,一个用户的事务不能被其他用户的事务所干扰,多个并发事务之间数要相互隔离。
  4. 持久性:是指一个事务一旦提交,他对数据库中数据的改变就是就是永久性的。
9.不考虑隔离性,会引发的问题?
  1. 脏读:是指一个事务读到另一个事务未提交的数据
  2. 不可重复读:在一个事务中,两次查询到的结果不一致(针对 update 操作)
  3. 虚读(幻读):在一个事务中,两次查询到的结果不一致(针对 insert 操作)
11.事务的隔离级别
  1. 读未提交(Read uncommitted):最低级别,上述情况都不能避免
  2. 读已提交(Read committed):可避免 脏读 发生。Oracle默认隔离级别
  3. 可重复读(Repeatable read):可避免 脏读、不可重复读 发生。Mysql默认隔离级别
  4. 串行化(Serializable):可避免 脏读、不可重复读、虚读 发生
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值