第一章 什么是数据库(Database)
先思考一个问题。
假设你写一个 Vue 项目,有一个用户注册功能。
注册之后需要保存:
| id | 用户名 | 密码 | 年龄 |
|---|---|---|---|
| 1 | Tom | 123456 | 20 |
| 2 | Jack | 654321 | 22 |
这些数据放哪里?
最开始,很多人会想到:
user.json
内容:
[
{
"id":1,
"name":"Tom",
"age":20
},
{
"id":2,
"name":"Jack",
"age":22
}
]
或者
user.txt
Tom
Jack
Lucy
这当然可以。
但是问题来了。
文件存储的问题
例如现在有一百万用户。
user.json
已经变成
800MB
如果查找
Tom
程序需要:
打开文件
↓
读取全部内容
↓
遍历
↓
找到Tom
时间复杂度就是
O(n)
数据越多越慢。
如果现在修改:
Jack
流程:
读取整个文件
↓
修改
↓
重新写整个文件
效率非常低。
如果两个程序同时修改:
程序A
修改Tom
程序B
修改Lucy
可能出现:
A覆盖B
或者
B覆盖A
数据丢失。
如果突然断电:
写了一半
文件损坏。
例如:
{
"id":1,
"name":"Tom"
"id":
JSON直接坏掉。
所以,文件不适合作为大型数据存储。
数据库就是为了解决这些问题
数据库(Database):
数据库是按照一定规则组织、存储、管理数据的软件系统。
它不是一个文件。
而是一套完整的软件。
例如:
MySQL
里面可以保存:
用户
订单
商品
日志
权限
评论
例如:
school
数据库里面:
student
teacher
course
score
这些叫:
表(Table)
数据库能做什么?
数据库主要负责四件事情:
增加(Create)
读取(Read)
修改(Update)
删除(Delete)
简称:
CRUD
以后你写 NestJS:
@Post()
create(){}
@Get()
find(){}
@Patch()
update(){}
@Delete()
remove(){}
本质就是操作数据库。
数据库的发展
第一代
文件系统
txt
excel
json
问题很多。
第二代
关系型数据库
例如:
MySQL
Oracle
SQL Server
PostgreSQL
使用:
表(Table)
保存数据。
例如:
student
| id | name | age |
|---|---|---|
| 1 | Tom | 18 |
| 2 | Jack | 20 |
第三代
NoSQL数据库
例如:
- Redis
- MongoDB
- Cassandra
它们不用表。
以后我们学习 Redis 就属于这里。
第二章 DB、DBMS、RDBMS 到底是什么?
很多人第一次学数据库,最容易混淆这几个缩写。
其实它们之间是这样的关系:
DBMS(数据库管理系统)
│
┌─────────────┼─────────────┐
│ │ │
MySQL PostgreSQL Oracle
│
▼
创建 Database(数据库)
│
▼
school
│
┌────┴────┐
student teacher
DB(Database)
Database
意思:
数据库
例如:
school
里面有很多表。
student
teacher
course
所以:
Database
不是MySQL
而是:
school
mall
company
都属于 Database。
DBMS(Database Management System)
数据库管理系统。
例如:
MySQL
就是:
管理数据库的软件。
作用:
创建数据库
删除数据库
管理数据库
备份数据库
恢复数据库
例如:
MySQL
↓
创建
school
RDBMS
Relational Database Management System
关系型数据库管理系统。
为什么叫关系?
因为:
所有数据之间都有关系。
例如:
用户:
| id | name |
|---|---|
| 1 | Tom |
| 2 | Jack |
订单:
| id | user_id |
|---|---|
| 1 | 1 |
| 2 | 2 |
订单中的:
user_id
对应:
用户.id
这就是:
关系(Relation)。
所以:
MySQL
Oracle
PostgreSQL
都是:
RDBMS
第三章 什么是表(Table)
数据库里面最重要的概念就是:
Table
例如:
学生信息。
student
| id | name | age |
|---|---|---|
| 1 | Tom | 20 |
| 2 | Jack | 22 |
可以理解成:
Excel。
数据库里面每一个表,都像一个 Excel 工作表。
行(Row)
例如:
Tom
20
这一整条。
叫:
Row
又叫:
Record(记录)
列(Column)
例如:
id
name
age
这些叫:
Column
以后开发时,你会经常听到:
- 字段(Field)
- 列(Column)
它们在很多场景下可以理解为同一个概念。
单元格(Cell)
例如:
Tom
就是一个 Cell。
所以:
Table
↓
Column
↓
Row
↓
Cell
第四章 什么是 SQL?
SQL:
Structured Query Language(结构化查询语言)
它不是一种编程语言,而是一种专门用于操作关系型数据库的语言。
例如:
查询所有用户:
SELECT * FROM user;
新增用户:
INSERT INTO user(name, age)
VALUES ('Tom', 20);
修改用户:
UPDATE user
SET age = 21
WHERE id = 1;
删除用户:
DELETE FROM user
WHERE id = 1;
以后无论使用 NestJS、Java、Python、Go,底层最终都会执行 SQL(即使使用 ORM,ORM 也会帮你生成 SQL)。
第五章 为什么后端必须学习数据库?
作为一名后端开发者,数据库几乎贯穿所有业务场景:
- 用户注册:保存用户信息。
- 用户登录:查询用户名和密码。
- 商品管理:保存商品数据。
- 订单系统:记录订单。
- 权限系统:保存角色和权限。
- 日志系统:记录操作日志。
如果没有数据库,后端几乎无法完成这些核心功能。
本阶段需要掌握的核心概念
| 概念 | 需要理解的内容 |
|---|---|
| Database(数据库) | 存储和组织数据的逻辑容器 |
| DBMS | 管理数据库的软件,如 MySQL |
| RDBMS | 使用表和关系组织数据的数据库管理系统 |
| Table(表) | 数据的主要存储结构 |
| Row(行) | 一条记录 |
| Column(列) | 一个字段 |
| SQL | 操作数据库的标准语言 |
| CRUD | 增、查、改、删四种基本操作 |
本章思考题(建议你先回答)
- 为什么大型项目通常不会直接使用 JSON 文件保存业务数据?
JSON 文件适合保存配置、小型数据,不适合作为业务数据库,因为它查询效率低、并发能力弱、没有事务、不支持索引、容易损坏,而 MySQL 提供索引、事务、锁机制、日志恢复等能力,因此大型项目都会使用数据库。 Database和MySQL有什么区别?
MySQL 是数据库管理系统(DBMS),用于创建和管理数据库;Database 是实际存储数据的逻辑容器,一个 MySQL 实例中可以创建多个 Database。- 一张数据表由哪些基本元素组成?
一张数据表主要由表名、列(字段)、行(记录)和单元格组成。其中列定义数据类型,行表示一条完整的数据记录。 - SQL 是编程语言吗?它的主要作用是什么?
SQL 不是通用编程语言,而是一种用于操作关系型数据库的标准语言,主要负责数据库的增删改查、表结构定义、权限管理等操作。 - 为什么说后端开发离不开数据库?
后端的职责之一就是处理和持久化业务数据,而数据库是最常见的数据持久化方式。无论是用户、订单、商品还是日志,几乎所有业务数据都需要存储在数据库中,因此数据库是后端开发的核心基础设施。
第一阶段知识总结
数据库基础
│
├── 为什么需要数据库
│
├── 文件存储的问题
│ ├── 查询慢
│ ├── 并发差
│ ├── 容易损坏
│ ├── 不支持事务
│ └── 不支持复杂查询
│
├── DB(数据库)
│
├── DBMS(数据库管理系统)
│
├── RDBMS(关系型数据库)
│
├── Table(表)
│ ├── Column(列)
│ ├── Row(行)
│ └── Cell(单元格)
│
└── SQL