数据库基础(Mysql+MongoDB)

MySQL

概念

    MySQL是著名的关系型数据库,顾名思义,是建立在关系模型基础上的数据库。关系模型说明数据库中存储的数据之间的联系(一对一、一对多、多对一、多对多)。 关系型数据的数据都放在表里,表的每一行代表一条数据。 关系型数据通过sql来操作数据库中的数据。

事务

何为事务

一组逻辑操作,要么都执行,要么都不执行

经典eg,银行转账问题: 小明给小红转账100元的实际操作 小明账户减1000元 小红账号加1000元

ACID特性

    原子性 一致性 隔离性 持久性

事务的隔离级别

    读未提交: 读已提交: 可重复读:(Innodb默认隔离级别)能够避免脏读和不可重复读,但幻读仍有可能发生 序列化:

并发事务所带来的问题

    脏读:读取到还未提交的数据 丢失修改:两个事务同时修改一个数据,第一个事务修改的结果就丢失了 不可重复读:一个事务多次读取同一条事务的过程中,如果其他事物对这条数据进行了修改,则第一个事务多次读取到的值可能不同 幻读:条件查询时,一个事务前后两次查询到的数据条目数量不相同 不可重复读和幻读的区别:不可重复读针对的是某一列的值,幻读针对的是记录的数量

索引

什么是索引

用于快速查询和检索结构的数据结构(类似新华字典的目录)

索引优缺点

优点:

    加快查询速度 通过创建唯一性索引保障数据库中每行数据的唯一性 缺点: 创建和维护索引需要耗费时间 索引使用物理文件存储,占用空间

索引底层数据结构

  1. Hash表 哈希表就是键值对集合,通过hash操作(散列算法)快速找到key对应的index 会有哈希冲突,一般通过拉链法, 同时,哈希表不支持顺序和范围查找
  2. B树 多路平衡查找树 非叶子节点也存放数据,因此把热点数据放在靠近根节点的位置,可以提高热点数据的索引效率
  3. B+树 非叶子节点仅存放键,而不存放数据,所以一次io操作可以容纳更多的关键字,从而降低io操作次数 innodb中叶子结点存放所有数据(聚簇索引)

区别:

    B树只适用于随机索引,B+树使用随机和顺序检索

索引类型

  1. 主键索引:一般为自增的唯一字段,Innodb为聚簇索引
  2. 二级索引:叶子结点存放主键,来定位主键的位置,非聚簇索引 2.1

MongoDB

NoSQL数据库是什么

not only sql 即非关系型数据库,通过键值对的方式存储数据

MongoDB的好处?

    存储方式基于虚拟内存+持久化,热数据放在内存中,读写性能更高 扩展性更高 BSON存储格式更适用于文件存储 内置GridFS适用于文件存储(对大文件拆分)
经验分享 程序员 微信小程序 职场和发展