MySQL 基础概念
MySQL 是目前最流行的开源关系型数据库管理系统之一。学习路径见 数据存储导读。广泛应用于 Web 应用、企业系统和大数据领域。理解其基础概念是掌握数据库开发的第一步。
一、什么是数据库
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。简单来说,就像电子化的文件柜,专门用于保存大量结构化信息,并支持高效的增、删、改、查操作。
与 Excel 等文件不同,数据库具有以下特点:
- 持久化存储:数据长期保存在磁盘中,不因程序关闭而丢失。
- 并发访问:允许多个用户或应用同时读写数据,并提供事务隔离保证。
- 安全性:提供用户权限控制、备份恢复等机制。
- 减少冗余:通过规范化的设计,避免数据重复存储。
二、关系型数据库
关系型数据库(Relational Database)是目前应用最广泛的数据库类型,其核心思想由 IBM 的 E.F. Codd 于 1970 年提出。
基本特征:
- 数据以**二维表(Table)**的形式组织,每个表由行和列构成。
- 表与表之间通过**关联键(外键)**建立联系,反映现实世界实体间的关联。
- 支持结构化查询语言(SQL),使用统一的标准操作数据。
为何称为“关系型”? “关系”指的是数学上的集合关系。一张表可以看作一个关系,表中的每一行是关系的一个元组(tuple),列是属性(attribute)。通过关系代数运算(如选择、投影、连接)来操作数据。
常见的关系型数据库:
- 商业:Oracle、SQL Server、DB2
- 开源:MySQL、PostgreSQL、SQLite
三、MySQL 特点
MySQL 最初由瑞典 MySQL AB 公司开发,后被 Sun 公司收购,现属于 Oracle 旗下。其流行原因包括:
| 特点 | 说明 |
|---|---|
| 开源免费 | 社区版基于 GPL 协议,可自由使用、修改和分发 |
| 跨平台 | 支持 Windows、Linux、macOS、FreeBSD 等多种操作系统 |
| 高性能 | 通过索引、缓冲池、存储引擎优化(如 InnoDB)实现高吞吐量;MySQL 8.0 已移除查询缓存(Query Cache) |
| 易用性 | 提供命令行工具、图形化管理工具(如 MySQL Workbench),学习曲线平缓 |
| 安全性 | 支持 SSL 传输、用户权限分级、加密插件等 |
| 扩展性 | 支持主从复制、分库分表、集群方案(如 NDB Cluster) |
| 存储引擎可插拔 | 默认 InnoDB(事务、行锁、外键);其他引擎(如 MEMORY)按场景选用,新项目一般以 InnoDB 为主 |
四、常用术语详解
1. 数据库(Database)
数据库是表的集合,也是最高级别的存储容器。一个 MySQL 服务器可以管理多个数据库,每个数据库之间相互隔离。
例如:一个电商系统可能包含 user_db(用户库)、order_db(订单库)、product_db(商品库)。
2. 表(Table)
表是数据库中存储数据的核心结构,由**行(记录)和列(字段)**组成的二维网格。
例如:用户表 users 可能包含 id、name、email、age 等列。
3. 行(Row / Record)
行表示表中的一条具体数据记录。例如用户表里的一行代表一个实际用户:(1, '张三', 'zhangsan@example.com', 25)。
4. 列(Column / Field)
列定义了表的一个属性,每个列都有特定的数据类型(如 INT、VARCHAR、DATE),并可以设置约束(如 NOT NULL、DEFAULT)。例如 age 列的类型为 INT,表示存储整数年龄。
5. 主键(Primary Key)
主键是表中唯一标识每一行的一列或列的组合。主键的值必须唯一且不能为 NULL。一张表只能有一个主键。
例如用户表的 id 列就是主键,确保每个用户有唯一的编号。
6. 外键(Foreign Key)
外键用于建立表与表之间的关联,它指向另一张表的主键。外键可以保证数据的参照完整性,即外键值必须在被引用表中存在(或为 NULL)。
例如:订单表 orders 中的 user_id 列作为外键,引用用户表的 id,表示每个订单属于某个已存在的用户。
7. 索引(Index)
索引是一种用于加速数据检索的数据库对象,类似于书籍的目录。它基于一列或多列创建,能够大幅提高 SELECT 查询的速度,但会略微降低 INSERT、UPDATE、DELETE 的性能(因为需要更新索引)。
常见的索引类型:普通索引、唯一索引(UNIQUE)、全文索引(FULLTEXT)、组合索引(多列)。
8. 视图(View)
视图是一个虚拟表,它不实际存储数据,而是保存了一条 SELECT 查询语句。用户可以将复杂的多表关联查询定义为视图,之后像操作普通表一样查询视图,简化代码并隐藏底层表结构。视图也可以实现数据安全(例如只展示某些列)。
CREATE VIEW active_users AS
SELECT id, name FROM users WHERE status = 'active';
9. 存储过程(Stored Procedure)
存储过程是一组预编译的 SQL 语句,存储在数据库中,可以接受参数并返回结果。它类似于编程语言中的函数,能够封装复杂的业务逻辑,减少网络传输,提高执行效率。
DELIMITER //
CREATE PROCEDURE GetUser(IN userId INT)
BEGIN
SELECT * FROM users WHERE id = userId;
END //
DELIMITER ;
-- 调用
CALL GetUser(100);
存储过程常用于数据校验、批量处理、报表生成等场景。
五、图示:数据库结构层次
MySQL Server
├── Database1 (e.g., shop)
│ ├── Table: users
│ │ ├── Columns: id (PK), name, email, ...
│ │ ├── Rows: (1, 'Alice', ...), (2, 'Bob', ...)
│ │ └── Indexes: idx_email
│ ├── Table: orders
│ │ ├── Columns: id (PK), user_id (FK), amount, ...
│ │ └── Rows: (101, 1, 99.9), ...
│ └── Views: v_user_orders
├── Database2 (e.g., blog)
└── ...
六、总结
| 术语 | 作用 |
|---|---|
| 数据库 | 表的集合 |
| 表 | 数据的二维结构 |
| 行 | 一条具体记录 |
| 列 | 一个字段,描述属性 |
| 主键 | 唯一标识一行 |
| 外键 | 关联其他表 |
| 索引 | 加速查询 |
| 视图 | 虚拟表,简化查询 |
| 存储过程 | 预编译的 SQL 代码块 |
理解这些基础概念,是学习 SQL 语句、数据库设计以及进一步掌握 MySQL 高级特性(事务、锁、优化等)的前提。建议结合实际建表、查询操作加深印象。
参考文献
| 资料 | 说明 |
|---|---|
| MySQL 8.0 手册 · Introduction | 官方 |
| InnoDB Storage Engine | 默认引擎 |
| 数据存储导读 | 本目录路径 |
相关文章
常用函数
MySQL 提供了丰富的内置函数,用于处理字符串、数值、日期和时间以及条件逻辑。下面分类介绍最常用的基础函数。
多表查询
多表查询用于从两个或更多表中获取数据。常见的连接类型包括内连接、外连接(左、右)和自连接。
MySQL 安装与基本操作
MySQL 的安装因操作系统而异,但安装完成后,通过命令行客户端连接并进行基本管理的方法是通用的。下面分别介绍安装方式和常用命令。
数据类型
MySQL 支持多种数据类型,可分为数值、字符串、日期时间、枚举/集合以及 JSON 等。选择合适的类型可以优化存储空间和查询性能。
查询数据
数据查询语言(DQL)用于从数据库中检索数据,核心是 SELECT 语句。下面从基础查询、条件筛选、排序、限制行数、聚合与分组等方面进行介绍。
数据库与表的基本操作
DDL(Data Definition Language)用于定义数据库结构,包括创建、修改、删除数据库和表。下面介绍 MySQL 中常用的 DDL 语句。