1
0
mirror of https://github.com/Snailclimb/JavaGuide synced 2025-06-20 22:17:09 +08:00
2022-04-09 16:19:10 +08:00

97 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 数据库
category: 计算机书籍
head:
- - meta
- name: keywords
content: 数据库书籍精选
---
数据库系统这门课在程序员的职业规划中也是非常重要的一门课甚至有些信息管理的专业的也要开设这门课。说这门课重要是因为对于程序员的发展来说一方面关系数据库系统、SQL 语言以及数据库的三段设计(概念设计、逻辑设计和物理设计)都是开发数据库应用程序的必备技能,通常在数据库应用开发岗位的面试中,数据库的设计是面试官青睐的考点,如何能根据需求分析并设计出完善的数据库系统,是程序员的必备技能,设计好了完善的数据库系统之后,再用 SQL 语言等工具对其进行实现,那么这些其实就是个人的编码能力了。
另一方面,数据库中的查询处理、查询优化、并发控制、事务管理、日志管理等内容,都是数据库中稍微进阶一点的技能,对于一些对岗位要求比较高的,这些技术同样要求熟练掌握。对一些查询优化的等数据库底层实现的内容,也是新型数据库开发的前置基础技能,对于一些研究型人才来说,也是非常重要的。
数据库系统与其他计算机专业课一样知识体系非常清晰而且他有一个非常突出的特点就是实际与理论相结合。SQL 语言,数据库设计等,这些都属于实践应用部分,而对于一些范式定义,两段锁协议并发控制等,这些就偏向于理论多一些。要想学好数据库系统,建议大家:
1. **在课程的前期阶段,熟练掌握 SQL 语言的应用,同时不要忘了训练关系代数的应用能力。** 关系代数虽然在数据库的实现上作用较小,但在学习阶段,结合关系代数和 SQL 语言学习,可以更加有体系地理清 SQL 语言各个子句之间的逻辑关系,有助于 SQL 语言的学习和记忆。关系代数的学习更像是建立一种思维,这种思维到了数据库底层实现学习环节也是非常有用的。
2. **在课程的中期阶段,熟练掌握 ER 图的应用,并强化数据库设计中的理论部分。** ER 图的熟练应用可以更加轻松地设计出关系数据库模式,而理论部分同样不能忽视,设计理论的运用决定了数据库的正确性和健壮性。
3. 而在课程的后期阶段,主要就是以理论居多,而且这些理论并不容易能找到配套的实验练习。**这里再次强调,凡是理论知识的学习,尽量要结合图解的方式**。
## 数据库基础
教材的话,强烈推荐 **[《数据库系统概念》](https://book.douban.com/subject/10548379/)** ,这本书涵盖了数据库系统的全套概念,知识体系清晰,是学习数据库系统非常经典的教材!不是参考书!
![](https://guide-blog-images.oss-cn-shenzhen.aliyuncs.com/github/javaguide/booksimage-20220409150441742.png)
如果你觉得书籍比较枯燥,自己坚持不下来的话,我推荐你可以先看看一些不错的视频。就比如北京师范大学的[《数据库系统原理》](https://www.icourse163.org/course/BNU-1002842007)这个就很不错。
这个课程的老师讲的非常详细,而且每一小节的作业设计的也与所讲知识很贴合,后面还有很多配套实验。
![](https://img-blog.csdnimg.cn/20210406154403673.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MzM3Mjcy,size_16,color_FFFFFF,t_70)
如果你比较喜欢动手,对于理论知识比较抵触的话,我推荐你看看[《如何开发一个简单的数据库》](https://cstack.github.io/db_tutorial/) ,这个 project 会手把手教你编写一个简单的数据库。
![](https://img-blog.csdnimg.cn/20210406154601698.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM0MzM3Mjcy,size_16,color_FFFFFF,t_70)
纸上学来终觉浅 绝知此事要躬行!强烈推荐 CS 专业的小伙伴一定要多多实践!!!
## MySQL
我们网站或 者 APP 的数据都是需要使用数据库来存储数据的。
一般企业项目开发中,使用 MySQL 比较多。如果你要学习 MySQL 的话,可以看下面这 3 本书籍:
- **[《MySQL 必知必会》](https://book.douban.com/subject/3354490/)** :非常薄!非常适合 MySQL 新手阅读,很棒的入门教材。
- **[《高性能 MySQL》](https://book.douban.com/subject/23008813/)** MySQL 领域的经典之作!学习 MySQL 必看!属于进阶内容,主要教你如何更好地使用 MySQL 。既有有理论,又有实践!如果你没时间都看一遍的话,我建议第 5 章(创建高性能的索引) 、第 6 章(查询性能优化) 你一定要认真看一下。
- **[《MySQL 技术内幕》](https://book.douban.com/subject/24708143/)** :你想深入了解 MySQL 存储引擎的话,看这本书准没错!
![](https://oscimg.oschina.net/oscnet/up-3d31e762933f9e50cc7170b2ebd8433917b.png)
视频的话,你可以看看动力节点的 [《MySQL 数据库教程视频》](https://www.bilibili.com/video/BV1fx411X7BD)。这个视频基本上把 MySQL 的相关一些入门知识给介绍完了。
另外,强推一波 [《MySQL 是怎样运行的》](https://book.douban.com/subject/35231266/) 这本书,内容很适合拿来准备面试。讲的很细节,但又不枯燥,内容非常良心!
![](https://img-blog.csdnimg.cn/20210703120643370.png)
学习了 MySQL 之后,务必确保自己掌握下面这些知识点:
1. MySQL 常用命令
- 安全:登录、增加/删除用户、备份数据和还原数据
- 数据库操作: 建库建表/删库删表、用户权限分配
- ......
2. MySQL 中常用的数据类型、字符集编码
3. MySQL 简单查询、条件查询、模糊查询、多表查询以及如何对查询结果排序、过滤、分组......
4. MySQL 中使用索引、视图、存储过程、游标、触发器
5. ......
如果你想让自己更加了解 MySQL ,同时也是为了准备面试的话,下面这些知识点要格外注意:
1. 索引索引优缺点、B 树和 B+树、聚集索引与非聚集索引、覆盖索引
2. 事务事务、数据库事务、ACID、并发事务、事务隔离级别
3. 存储引擎MyISAM 和 InnoDB
4. 锁机制与 InnoDB 锁算法
## Redis
**Redis 就是一个使用 C 语言开发的数据库**,不过与传统数据库不同的是 **Redis 的数据是存在内存中的** ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。
如果你要学习 Redis 的话,强烈推荐 **[《Redis 设计与实现》](https://book.douban.com/subject/25900156/)** 和 **[《Redis 实战》](https://book.douban.com/subject/26612779/)** 这两本书。另外,**[《Redis 开发与运维》](https://book.douban.com/subject/26971561/)** 这本书也非常不错,既有基础介绍,又有一线开发运维经验分享。
![](https://oscimg.oschina.net/oscnet/up-9f20f5e860d143181bd27343abfef3af2ce.png)
下面是我总结的一些关于并发的小问题,你可以拿来自测:
1. Redis 和 Memcached 的区别和共同点
2. 为什么要用 Redis/为什么要用缓存?
3. Redis 常见数据结构以及使用场景分析
4. Redis 没有使用多线程为什么不使用多线程Redis6.0 之后为何引入了多线程?
5. Redis 给缓存数据设置过期时间有啥用?
6. Redis 是如何判断数据是否过期的呢?
7. 过期的数据的删除策略了解么?
8. Redis 内存淘汰机制了解么?
9. Redis 持久化机制(怎么保证 Redis 挂掉之后再重启数据可以进行恢复)
10. Redis 缓存穿透、缓存雪崩?
11. 如何保证缓存和数据库数据的一致性?
12. ......