在软件开发中,数据是核心。无论是用户信息、商品列表,还是聊天记录,都需要安全、高效地存储和管理。而这就是数据库(Database)的用武之地。
本文将带您了解数据库的基础知识,帮助您构建完整的数据库认知体系,并掌握最基础的 SQL 操作。
1. 什么是数据库?
简单来说,数据库(Database,简称 DB)是按照数据结构来组织、存储和管理数据的仓库。
为什么不用文件(如 Excel/TXT)存储数据?
虽然 Excel 也能存数据,但在软件开发中,文件存储存在以下局限:
- 并发冲突:多个人同时修改同一个文件容易导致数据覆盖。
- 读写效率:当数据量达到百万级或千万级时,直接读取文本文件会变得极其缓慢。
- 数据安全与一致性:难以保证数据的完整性(例如:用户余额不能为负数)。
数据库管理系统(DBMS)就是为了解决这些问题而设计的,它位于用户与操作系统之间,负责科学地组织和维护数据。
2. 数据库的两大阵营:SQL 与 NoSQL
目前主流的数据库系统主要分为两大类:关系型数据库(SQL) 和 非关系型数据库(NoSQL)。
| 特性 | 关系型数据库 (SQL) | 非关系型数据库 (NoSQL) |
|---|---|---|
| 数据存储方式 | 二维表格形式(行和列) | 键值对、文档、图形或列族 |
| 数据结构 | 结构化强,定义了严格的表结构(Schema) | 动态灵活,无须预先定义严格的结构 |
| 典型代表 | MySQL, PostgreSQL, Oracle, SQL Server | Redis (键值), MongoDB (文档) |
| 适用场景 | 事务一致性要求高(如金融财务、用户系统) | 高并发读写、海量非结构化数据(如缓存、日志) |
3. 关系型数据库的核心概念
在关系型数据库中,数据是以"表"为单位进行组织的。我们需要理解以下几个核心术语:
- 数据库 (Database):一个项目通常对应一个独立的数据库。
- 表 (Table):由行和列组成的二维结构,用来存储特定类型的数据(如"用户表"、"订单表")。
- 行/记录 (Row/Record):表中的一条具体数据,代表一个实体(如一个具体的用户)。
- 列/字段 (Column/Field):表中的一列,代表数据的一个属性(如"姓名"、"年龄")。
- 主键 (Primary Key):表中用来唯一标识某一行数据的字段,不允许重复,也不允许为空(通常是自增的 ID)。
- 外键 (Foreign Key):用于建立两个表之间关联关系的字段。
4. SQL 快速入门
SQL(Structured Query Language,结构化查询语言)是用于管理关系型数据库的标准语言。
SQL 语句通常分为以下几类,下面我们以最基础的**学生表(students)**为例进行演示:
4.1 数据定义语言(DDL):创建表结构
使用 CREATE TABLE 来定义一张表的结构和字段类型:
sql
-- 创建一个名为 students 的表
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT, -- 自增主键
name VARCHAR(50) NOT NULL, -- 姓名,不能为空
age INT, -- 年龄
gender VARCHAR(10), -- 性别
score DECIMAL(5,2) -- 成绩,保留两位小数
);
4.2 数据操作语言(DML):增、删、改
用来对表中的数据进行写入和修改:
sql
-- 1. 插入数据 (Insert)
INSERT INTO students (name, age, gender, score)
VALUES ('张三', 18, '男', 92.5),
('李四', 19, '女', 88.0),
('王五', 20, '男', 59.5);
-- 2. 修改数据 (Update)
-- 注意:通常需要配合 WHERE 条件,否则会修改整张表的数据
UPDATE students
SET score = 60.0
WHERE name = '王五';
-- 3. 删除数据 (Delete)
DELETE FROM students
WHERE id = 3;
4.3 数据查询语言(DQL):查询数据
这是 SQL 中最常用、最核心的部分:
sql
-- 1. 查询所有字段
SELECT * FROM students;
-- 2. 条件查询 (WHERE)
SELECT name, score
FROM students
WHERE age >= 18 AND gender = '男';
-- 3. 排序查询 (ORDER BY)
-- DESC 代表降序,ASC 代表升序(默认)
SELECT name, score
FROM students
ORDER BY score DESC;
-- 4. 聚合与分组 (GROUP BY)
-- 统计男女学生的平均成绩
SELECT gender, AVG(score) as avg_score
FROM students
GROUP BY gender;
5. 数据库的核心特征:ACID 事务
在涉及资金、库存等关键业务时,数据库的**事务(Transaction)**机制至关重要。
事务是指一组要么全部执行成功,要么全部执行失败的操作序列。它必须满足 ACID 四大特性:
- 原子性(Atomicity):事务中的所有操作是不可分割的整体,要么全部成功,要么全部失败退回(回滚)。
- 一致性(Consistency):事务执行前后,数据库的完整性约束没有被破坏(例如:转账前后,两人账户总额不变)。
- 隔离性(Isolation):并发执行的事务之间互不干扰,防止数据发生混乱。
- 持久性(Durability):事务一旦提交,其对数据库的修改就是永久性的,即使系统崩溃也不会丢失。
6. 后续学习建议
掌握了基本概念和 SQL 语法后,您可以按照以下路径继续深入:
- 安装并实践:在本地安装 MySQL 或使用轻量级的 SQLite 进行实际编码练习。
- 学习多表设计 :理解一对一、一对多、多对多的表关系,掌握
JOIN连接查询。 - 性能优化入门:理解索引(Index)的作用,学习如何提高查询速度。
- 结合编程语言:学习如何使用 Python (通过 PyMySQL/SQLAlchemy) 或其他语言连接和操作数据库。