查看原文
其他

编程百晓生 | 啥是数据库?

鱼皮 程序员鱼皮 2022-08-14

04

啥是数据库?


鱼小皮

哥,我凉了。

怎么肥四?

老百


鱼小皮

我实习的那家公司倒闭了,我拿不到实习证明了。

好好的公司,怎么说倒就倒了?

老百


鱼小皮

听说有个哥们把公司所有的业务数据都整没了。真是不可思议!

唉,那铁定是删库跑路了啊!

老百

鱼小皮

啊?删库?删什么库?

当然是数据库呀!一般情况下,企业会把业务数据存放在数据库中。数据库是企业的生命,一旦其中的数据被删除,后果不堪设想!




老百


鱼小皮

听起来很厉害的样子,快给我讲讲什么是数据库吧!


什么是数据库?

数据库(Database,简称 DB)是按照一定结构和规则来存储和管理数据的仓库。数据库通常以文件的形式长期存储在服务器内,是有组织、可共享、统一管理的大量数据集。


下图就是两个数据库文件:



但是,这些数据文件不是直接以便于人类理解的形式存储的,让我们打开其中一个文件:


db 文件内容


鱼小皮

这都是啥啊,乱七八糟的,数据存到这种文件里不就完全读不懂了!

出于安全和性能等考虑,我们无法直接使用这些数据库文件,而是需要一个数据库管理系统来帮助我们管理数据库。



老百


数据库管理系统

数据库管理系统(Database Management System,简称 DBMS),是对数据库进行统一的管理和控制的大型软件。耳熟能详的 MySQL 就是一个数据库管理系统。


数据库管理系统使我们能够轻松地建立、使用和维护数据库,对数据库的共享提供了很好的支持,并能保证数据库的安全性和完整性。不同的数据库管理系统对应的数据库存储文件的结构也不同。


数据库和数据库管理系统在软件开发中扮演着不可或缺的角色。比如要开发一个教务系统,学生的信息都会存放在数据库中。当学生想登录教务网站查询自己的考试成绩时,部署在服务器上的程序会连接数据库管理系统进行查询,并从数据库中取出该学生的成绩,最后显示到页面上。


查询数据过程



鱼小皮

原来如此,但为什么要把数据存在数据库中呢?直接存到文件中,不也可以被程序读取么?

打个比方,我们有很多衣服,如果直接堆在一起,找衣服的时候就会很麻烦。


老百



但如果我们有一个衣柜,就可以按照一定规则,把不同的衣服放在不同的格子中整理,再去找衣服就很方便。数据库就是这样一个整理数据的柜子。




老百




鱼小皮

那我把文件存到 Excel 里,查询时不也很方便么?

Excel 虽然可以将数据以表格的形式展示,但是 Excel 文件难以被共享(多人同时访问),数据之间也缺乏关联性。



老百

鱼小皮

那用腾讯在线文档不就可以了么?

闭嘴!让我给你好好讲讲数据库的优点!


老百


数据库的优点

数据库之所以能被开发者广泛使用,是因为其有很多文件等其他存储方式不可替代的优点(此处主要讲关系型数据库的优点)。


1. 使用方便

传统的关系型数据库采用类似表格的行列式存储, 查询方便且易于理解。


2. 存储结构稳定

关系型数据库要求数据以结构化的方式存储,必须先定义表,再存储数据,因此数据的形式和内容可控,比如禁止用户存储空字段。因此可靠性更高。


3. 统一管控

数据可以由数据库管理系统统一管理和控制,数据库的各种信息一目了然,就像 Windows 系统的资源管理器一样。


4. 数据共享方便

由数据库管理系统集中管理数据库,用户要使用数据时,只需和数据库管理系统建立连接即可。因此数据可被多个用户程序共享。


5. 权限控制

使用数据库管理系统能够很方便地控制不同用户对数据库不同部分的访问及操作权限,能够很好的保证数据库安全性。


6. 数据独立性高

开发者和程序只需要关心数据库的逻辑结构(数据间的关系),而不需要去理解数据库底层的文件存储(看也看不懂)。即使底层的数据文件存储结构发生改变,也不需要改变我们的应用程序。


7. 数据备份与恢复

使用数据库管理系统可以定期对数据进行备份与恢复,保障数据的安全性。


8. 空间占用少,性能高

数据库管理系统会采用特定的数据结构来存储数据,并优化存储空间和数据查询性能,相对于我们自己建立文件来存储和读取数据,空间占用更少、性能会更高。




鱼小皮

原来使用数据库有这么多好处,但是什么数据都可以存到数据库中么?比如图片?

理论上任何数据都可以存到数据库中,就像你可以往衣柜里放别的东西。但是不同的数据应选择不同类型的数据库进行存储,才能发挥出数据库的价值。





老百


数据库的分类

数据库可以分为两大类:关系型数据库和非关系型数据库。


关系型数据库

关系型数据库(RDBMS)是使用最广泛的数据库,采用了关系模型来组织数据,其主要结构是库 + 表 + 表之间的关系 + 字段,便于用户理解。


一个库有多张表:


 main 数据库下有多张表


每张表采用行列式存储,类似表格。每一行代表一条数据,每一列代表一个字段。通常每张表都要定义一个主键,主键的值不能重复,用于标识唯一的一行数据,就和我们每个人都有唯一的身份证号一样。


用户表(id 是主键)


表之间可以通过值相同的字段关联(通常用 id 关联):


用户表和用户扩展信息表通过 id 关联


通过将表进行关联,可以在查询时同时查出多个表的列,比如可以将上面两张关联表拼接为下表:


将两张关联表根据 id 合并为一张表


目前最主流的关系型数据库有 MySQL 和 Oracle。



非关系型数据库(NoSQL)

非关系型数据库又称 NoSQL(Not Only SQL,不仅仅是 SQL)。由于数据类型太多样了,关系型数据库并不适用于所有的数据,因此针对不同的数据类型,出现了不同的 NoSQL。


使用特定类型的 NoSQL 存储特定类型的数据,具有提升性能、节约空间等好处。


常见的非关系型数据库有键值存储数据库 Redis、列式存储数据库 HBase、文档数据库 MongoDB、图形数据库 Neo4J、时序数据库 InfluxDB、对象数据库、XML 数据库等。



鱼小皮

原来有那么多数据库,大开眼界。那我应该怎么学习数据库呢?

先学最实用的关系型数据库吧,我给你亿点学习建议。

老百


数据库学习建议

数据库的学习分为五个阶段,前两个阶段是使用数据库的基础,最为重要。一般学完前三个阶段就可以在企业中很好地应用数据库了。


1. SQL

结构化查询语言(Structured Query Language)简称 SQL,是一种面向数据库的编程语言。使用 SQL 可以查询、管理和控制数据库。


SQL 又分为五类:

1. DDL(Data Definition Language)数据定义语言,包括创建数据库表、定义字段等。


2. DML(Data Manipulation Language)数据操作语言,包括增删改查(大家常说的 CRUD)。


3. DQL(Data Query Language)数据查询语言,就是 select 语句(也是 DML),语句灵活、优化技巧多,是 SQL 学习的重中之重。


4. DCL(Data Control Language)数据控制语言,控制用户对数据库的访问权限。


5. TCL(Transaction Control Language)事务控制语言,比如事务的开启、回滚等。


2. 设计

要能够针对业务场景设计出数据库、数据表和表之间的关系,通常需要遵循一定的规范。其中,表字段类型的选取尤为重要,选取不当会影响查询的性能,比如应当用整型代替字符串类型来存储 IP 地址。


可以多参考他人的设计,熟能生巧。


3. 调优

使用一些技巧来提升你的数据库查询和操作性能。常用的有给字段添加索引、定位慢查询并优化、配置 MySQL 参数调优等。调优是在企业中应用数据库必不可少的环节,因此 MySQL 调优也是面试的重点


4. 原理

了解数据库底层的存储原理,比如 MySQL 中的 InnoDB 存储引擎是如何实现的、索引底层的 B+Tree 是如何实现的等等。这有助于我们设计出高性能的数据表,并且更进一步调优性能。


B+Tree 数据结构


5. 运维

数据库的运维对企业十分重要,一般都有专门的人员来维护数据库,主要工作包括


1. 保证数据库的正常运行。


2. 控制用户的访问权限,保证数据库的安全。


3. 在数据量大时进行集群、读写分离的搭建,保证数据库的性能。


4. 在数据库出现异常时能够快速定位日志进行排错。


5. 定期备份数据,并且在数据出现错误进行回滚、数据丢失时进行恢复。


6. 提出提升数据库性能的 SQL 优化建议。


运维的知识和经验更多的是在实际工作中学习和积累的。可以看一些视频案例进行学习。


鱼小皮

谢谢哥,太详细了!我一定好好学习数据库!将来也要删库跑路!

!?

老百


点击下方阅读原文可以在线练习 SQL 哦。


往期推荐

小记 | 再次登上学生时代的个人博客,泪目

小记 | 一周上线百万级高并发系统

编程百晓生 | 我竟然被狗狗币勒索了?

编程百晓生 | 大的数据就是大数据?

编程百晓生 | 啥是前端 ?



鱼皮送福利啦

10 月 31 日起 15 天内,鱼皮将为文章阅读数、分享数、留言数最多的读者送上企鹅周边~ 并抽取几名粉丝送出随机小礼品!


阅读最多:超长鼠标垫

分享最多:QQ长鹅

留言最多:QQ小公仔

幸运奖:腾讯云U盘、笔记本等


感谢大家支持,鱼皮会继续努力创作优质内容!



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存