介绍
数据库就是存放数据的库,负责存储、管理和检索数据。
我们平时看到的网站上的数据,基本都是存放到数据库中的,在用户需要的时候,再通过后端程序从数据库中取出来。
因此,数据库是后端开发的必备技能,也是核心技能! 无论你学什么语言的后端,数据库一定都要好好学,也是面试的重中之重!
数据库又分为关系型数据库和非关系型数据库。关系型数据库适用于存储相互之间有关联的数据,比如做一个学生管理系统,要存储学生、班级,一个班级有多个学生,这就是一种关联关系,关系型数据库典型的技术是 MySQL;而非关系型数据库主要用于存储零散的、相互独立的数据,典型的技术是 Redis。
本路线我们主要学习的是关系型数据库,并且以最主流、学习成本相对更低的关系型数据库 MySQL 为主。如果要学习非关系型数据库 Redis,请移步至:Redis 学习路线
注意,MySQL 是一种数据库管理系统,但是不能说数据库就是 MySQL!
就业方向
和数据库相关的岗位还是挺多的,不过每个岗位的要学的知识都不止数据库这一个,往往还要学习很多行业特定的专业技能。
- 数据库管理员:有些公司也把这个岗位叫做 “数据库运维”,顾名思义,工作职责就是负责管理和维护数据库。也包括数据库的备份和恢复、容量规划、优化等等。一般小公司不太会有这种岗位,可能是一个运维就把各种公司用到的服务全包了。
- 数据库开发:和后端开发的职责有一定交集,都会写 SQL。但是有些公司的业务 SQL 可能非常复杂,这种情况下就有专门的数据库开发同学来主导编写 SQL 语句,然后再递交给后端去接入到系统中。这类岗位要求你编写 SQL 的能力必须非常强!
- 数据分析:负责从数据库(数据仓库)中提取数据,从中得到更有价值的信息,主要的工作也是写 SQL 查库。但这类岗位相对更卷一些,并且需要一定的数学基础。
- 大数据开发:和数据库开发类似,都是编写 SQL 和程序从数据库中查出 / 计算出需要的数据。但是大数据开发的要求会更高一些,因为他们往往面对的数据量更大、面对的数据库更多样、需要考虑的性能和存储问题更多、编写的程序更复杂。
此外,还有数据科学家、数据挖掘、云数据库工程师等等,坑位相对更少、要求相对更高,不做过多介绍了。
大纲
对数据库的学习主要分为 4 部分:
- 数据库理论
- MySQL 入门及实践
- SQL 语句
- MySQL 高级(原理)
一般对绝大多数同学来说,把前 3 部分学完就足够了,高级部分面试会考察一些,背背八股文面试题就行。
其中,最最最重要的是一定要能根据业务场景独立设计库表,并且熟练编写 SQL 语句。
一、数据库理论
以前在大学的时候,老师是先给我们讲理论,再上手写代码实践的。但是现在网上很多的教程都是带着大家边实践边讲理论,我觉得这种方式更好,能让大家更轻松地快速入门、不枯燥。
入门可以看这个视频教程:https://www.bilibili.com/video/BV1Kr4y1i7ru,只用看 P1 - P57 集就足够了。
可以搭配菜鸟教程的 MySQL 文档进行巩固和实操:https://www.runoob.com/mysql/mysql-tutorial.html(文档中的 PHP 代码部分可忽略)
知识点
-
数据库基本概念
- 数据库
- 关系型数据库
- 非关系型数据库
- 数据库管理系统
- 表
- 字段
- 视图
- 约束
- SQL
- 查询
- 索引
- 事务
- 主键
- 外键
- 语法分类
- DDL
- DML
- DCL
- DQL
- 数据库
-
数据库设计
- 数据库三大范式
- 表关联
- 1 对 1
- 1 对多
- 多对多
- 笛卡尔积
- E-R 图
资源
以下资源仅供参考和查漏补缺,有选择地观看即可。
视频:
- 老杜 MySQL 入门基础 + 数据库实战:https://www.bilibili.com/video/BV1Vy4y1z7EX (内容相对精炼,有习题)
- 尚硅谷 MySQL 基础到高级:https://www.bilibili.com/video/BV1iq4y1u7vj (近 22 年的课,质量也还不错)
- 尚硅谷 - MySQL基础教程:https://www.bilibili.com/video/BV1xW411u7ax (小姐姐讲课,但感觉音质一般)
书籍:
- 《MySQL 即学即用》:https://book.douban.com/subject/36230167/
- 《MySQL是怎样使用的,快速入门MySQL》:https://book.douban.com/subject/35670862/
二、MySQL 入门及实践
这个阶段和上个阶段是可以一起学习的,就看上面说的教程即可。
本阶段先了解 MySQL 的基本用法,能够通过 MySQL 控制台或可视化工具来操作数据库。然后就可以去看其他的教程,用你熟悉的编程语言去操作数据库了,比如 Java 的 JDBC 或 MyBatis 框架;在学习过程中,建议多尝试自己设计库表,培养良好的数据库设计能力。
当你要自己设计数据库时,可以看看 数据库大全 这个网站,里面有很多的案例可供学习参考。
知识点
- MySQL 安装
- MySQL 常用命令
- MySQL 基本操作
- 插入数据
- 删除数据
- 修改数据
- 查询数据
- MySQL 关键字
- MySQL 函数
- MySQL 查询语法
- 基本查询
- 条件查询
- 聚合查询
- 分组查询
- 连接
- 内连接
- 外连接
- 子查询
- 组合查询
- MySQL 约束
- MySQL 存储引擎
- 游标
- MySQL 触发器
- MySQL 事务
- MySQL 索引
- MySQL 视图
- MySQL 库表设计
- 客户端操作(比如 Java)
三、SQL 语句
对后端开发和数据开发来说,SQL 都是一个核心技能。
很多速成的同学可能只会使用框架来操作数据库,缺少了自己编写 SQL 的能力。所以这里建议大家先把以下知识点中的 SQL 语法都尝试编写执行一遍,然后在平时开发系统时多写多练、熟能生巧,而不是死记硬背。
可以通过以下网站在线练习 SQL:
- 鱼皮的 SQL 自学网:http://sqlmother.yupi.icu/
- SQL 在线运行:https://www.bejson.com/runcode/sql/
- SQL - 菜鸟教程:https://www.runoob.com/sql/sql-tutorial.html
知识点
- 基本概念
- 什么是 SQL
- 不同数据库的 SQL 差异
- 基础语法
- 选择 select
- select *
- select field
- select field as xxx
- 排序 order by
- 条件查询 where
- and
- or
- not
- like
- is null / is not null
- 去重 distinct
- 截断 limit
- 分页 offset
- 分支 case when
- 选择 select
- 分组聚合 group by
- 单级
- 多级
- having 子句
- 函数
- 时间函数
- 字符串函数
- 聚合函数
- 开窗函数
- sum over
- sum over order
- lag、lead
- row number
- 关联查询
- where
- join
- left join
- right join
- outer join
- 子查询
- 组合查询
- union
- union all
MySQL 高级
如果你是一名后端开发,还没有把框架学完、还不能独立开发完整项目,那么先不要学习这部分知识。
不过对于一名数据库管理员(数据库运维)来说,这部分知识是必学的!
推荐几本不错的书籍:
- 《MySQL 是怎样运行的》:https://book.douban.com/subject/35231266/ (算是国产良心强作)
- 《高性能 MySQL》:https://book.douban.com/subject/36096578/ (领域经典,但是读起来可能会有一定难度)
还有一些小实践,比如构建自己的数据库:https://cstack.github.io/db_tutorial/
看视频的话就经典培训机构:
- 黑马:https://www.bilibili.com/video/BV1Kr4y1i7ru (P58 - P195)
- 尚硅谷:https://www.bilibili.com/video/BV1iq4y1u7vj (P96 - P199)
知识点
- MySQL 体系架构
- MySQL 执行原理
- MySQL 并发控制
- MySQL 事务隔离级别
- MySQL 权限控制
- MySQL 安全管理
- MySQL 存储引擎
- InnoDB
- MyISAM
- MySQL 数据文件
- MySQL 锁
- 排他锁 / 共享锁
- 行锁 / 表锁
- 意向锁
- 意向共享锁
- 意向独占锁
- 间隙锁
- MySQL 运维管理
- MySQL 监控
- MySQL 性能指标
- MySQL 调优
- 软件层面优化
- 硬件层面优化
- 配置优化
- 索引优化
- 表和字段设计
- 数据备份与恢复
- 主从复制
- 读写分离
- 分库分表
经典面试题
列举一些数据库相关的高频考题(不到面试前一个月,不要急着背):
基础理论
- 什么是数据表、字段、主键、外键、视图?
- 什么是数据库的三大范式?
事务和锁
- 什么是数据库事务?事务的 ACID 特性是什么?
- 并发事务的控制方式有哪些?
- MySQL 事务有哪些隔离级别,分别有什么特点?
- MySQL 事务的默认隔离级别是什么?
- MySQL 事务的隔离级别是怎么实现的?
- 什么是 MVCC?InnoDB 引擎是如何实现 MVCC 机制的?
- MySQL 中表级锁和行级锁有什么区别?各自有什么优缺点?
- 什么是数据库中的共享锁、排他锁?
- 是什么意向锁?它有什么作用?
存储和索引
- MySQL 支持哪些存储引擎?默认使用哪个?
- MySQL 引擎中,MySIAM 和 InnoDB 有什么区别,各有什么优缺点,如何选择?
- 什么是数据库索引,使用索引有什么优缺点?
- MySQL 中的索引是怎么实现的?
- B+ 树是什么,B 树和 B+ 树有什么区别?为什么 MySQL 要用 B+ 树实现索引?
- 数据库索引有哪些类型?聚簇索引和非聚簇索引有什么区别,各有什么优缺点?
- 什么是索引下推,它有什么好处?
- 什么情况下数据库索引会失效?
- 什么是数据库索引的最左匹配原则?
- 你平时是怎么使用数据库索引的,有哪些高效利用索引的经验和技巧?
实践操作
- 什么是存储过程?使用存储过程有哪些优缺点?
- MySQL 有哪些日志?请分别介绍一下?
- binlog 和 redolog 有什么区别?什么是两阶段提交?
- 什么是 undolog 日志?undolog 如何保证事务的原子性?
- 什么是 MySQL 的查询缓存,有什么优缺点?
- 如何对 MySQL 的数据进行备份和恢复?
- 什么是 MySQL 执行计划?如何获取执行计划并对其进行分析?
- 一条 SQL 语句在 MySQL 中的执行过程是怎样的?
- 以 MySQL 为例,有哪些数据库性能优化的方法?
- 如何定位 MySQL 慢查询?
背面试题的话,现在网上的资源太多了,搜一下就好:https://search.bilibili.com/all?keyword=mysql%E9%9D%A2%E8%AF%95%E9%A2%98
此外,编程导航网站上也有一些面试题和题解,供大家参考:编程导航 MySQL 面试题
加油小伙伴们 💪🏻!
更多编程学习资源
- Java前端程序员必做项目实战教程+毕设网站
- 程序员免费编程学习交流社区(自学必备)
- 程序员保姆级求职写简历指南(找工作必备)
- 程序员免费面试刷题网站工具(找工作必备)
- 最新Java零基础入门学习路线 + Java教程
- 最新Python零基础入门学习路线 + Python教程
- 最新前端零基础入门学习路线 + 前端教程
- 最新数据结构和算法零基础入门学习路线 + 算法教程
- 最新C++零基础入门学习路线、C++教程
- 最新数据库零基础入门学习路线 + 数据库教程
- 最新Redis零基础入门学习路线 + Redis教程
- 最新计算机基础入门学习路线 + 计算机基础教程
- 最新小程序入门学习路线 + 小程序开发教程
- 最新SQL零基础入门学习路线 + SQL教程
- 最新Linux零基础入门学习路线 + Linux教程
- 最新Git/GitHub零基础入门学习路线 + Git教程
- 最新操作系统零基础入门学习路线 + 操作系统教程
- 最新计算机网络零基础入门学习路线 + 计算机网络教程
- 最新设计模式零基础入门学习路线 + 设计模式教程
- 最新软件工程零基础入门学习路线 + 软件工程教程