初识数据库 | 青训营笔记

58 阅读3分钟

字节青训的课程中有介绍数据库的知识,所以我简单介绍一下数据库,同时帮助大家复习,回顾一下知识点,有不对的地方希望大家及时指出,一起学习进步!

1. 数据库简介

数据库的全称是DBMS(DataBase Management System),即数据库管理系统。数据库主要分为关系型数据库和非关系型数据库,这类我截取了到目前为止Top10的数据库,如下图所示。

image.png

其中我们比较熟悉的是MySQL和Redis,本节主要介绍了数据库以MySQL为例展开。

2. SQL过程

一般我们都是使用navicat等软件进行SQL操作,你有没有想过我们一条简单的查询语句在数据库中经过了哪些步骤最终才能得到我们想要的数据并将数据呈现在我们面前?接下来我们以MySQL为例说明这个大致过程。

MySQL包括很多组件:连接器、分析器、优化器等等。首先客户端需要和连接器建立连接,验证权限通过以后就可以才可以执行下一步;下一步是查询缓存,因为考虑到实际场景下请求量较大会给数据库产生较大的压力,缓存是常见的缓解手段,所以在缓存中查看是否有需要的数据,但是数据库中的缓存查询并没有起到很好的作用,因为一旦数据发生更行,缓存就会失效,所以缓存查询的命中率非常低,这也是为什么后续推出的MySQL版本废除了查询缓存;发现缓存中没有,开始真正执行语句,在分析器中会进行词法分析和语义分析,会对你的SQL语句进行纠错;当SQL无误以后执行优化器,优化器的作用就是决定使用哪种查询方案;最后交给执行器执行方案,查询结果返回,整个过程示意图如下:

image.png

3. 事务和事务隔离级别

提到数据据就不得不说事务这个改变,对于MySQL来说存储引擎的选择决定了是否支持事务,对于早期默认的存储引擎MyISAM是不支持事务的,所以这里选择InnoDB介绍。事务的四个特性相信大家都熟记于心:A-原子性、C-一致性、I-隔离性、D-持久性。其中多个事务操作同一个数据库的时候,可能出现脏读、不可重复读和幻读的问题,所以就有了不同的事务隔离级别来解决上面的问题。标准的事务隔离级别包括:读未提交、读已提交、可重复读、串行化,那这四种隔离级别该怎么理解呢,我通过一个简单的例子说明。假设数据库中只有一行一列,值为1,同时开启两个事务A,B。

image.png

  • 在读未提交的隔离级别下三次查询的结果都是2;
  • 在读已提交的隔离级别下第一次查询X=1,第二第三次查询X=2;
  • 在可重复读的隔离级别下,A事务提交之前查询到的X应该是一致的,所以第一第二次查询X=1,第三次X=2;
  • 在串行化事务隔离级别下,事务A会先执行,事务B等到事务A提交以后才执行,所以第一次第二次X=1,第三次X=3;