中间件专栏之MySQL篇——MySQL的基本原理和基本操作

news/2025/3/4 18:04:33/

一、什么是MySQL

MySQL是一个常用的数据库管理系统,它是关系型数据库,它使用结构化查询语言(SQL)来管理数据库中的数据。MySQL 使用 (Table)来存储数据,数据以 行(Row)列(Column) 的形式组织。关系型数据库的关键特性包括数据存储在表中,并通过 外键 等机制进行表与表之间的关联。SQL 语言用于执行查询、插入、更新和删除操作,并允许通过复杂的查询进行数据的检索和管理。

二、数据库的常用术语

1. 数据库(Database)

  • 数据库是一个结构化的数据集合,用于存储和管理数据,通常以表格形式存储。

2. 数据库管理系统(DBMS)

  • 数据库管理系统是一种用于创建、管理和操作数据库的软件。常见的 DBMS 有 MySQL、PostgreSQL、Oracle、SQL Server 等。

3. 表(Table)

  • 表是数据库中数据存储的基本单位。表由 行(记录)列(字段) 组成。每个表有一个表名,用于唯一标识。

4. 行(Row)/记录(Record)

  • 表中的一条数据记录,通常由多个字段(列)组成。每一行代表一个完整的实体或实例。

5. 列(Column)/字段(Field)

  • 表的纵向数据,每列存储相同类型的数据。每个列有一个名称,并定义该列的数据类型(如整数、字符串、日期等)。

6. 主键(Primary Key)

  • 主键是一个表中的列或一组列,其值唯一地标识每一行数据。主键的值不能为 NULL。

7. 外键(Foreign Key)

  • 外键是指在一个表中的列,它用于建立与另一个表的联系。外键约束确保数据的完整性,确保外键值对应的记录在引用表中存在。

8. 索引(Index)

  • 索引是数据库中用于加速查询的结构。通过创建索引,数据库可以更快速地查找数据,而无需扫描整个表。

9. 查询(Query)

  • 查询是用来从数据库中提取数据的请求,通常使用 SQL(结构化查询语言)进行操作。例如,SELECT 查询用于从表中选择数据。

 三、MySQL体系结构

MySQL的体系结构可以分为多个层次,每个层次都有不同的功能组件。MySQL 的体系结构是客户端-服务器架构,主要包括以下几个核心部分:

1. 客户端层(Client Layer)

  • 客户端应用程序:MySQL 的客户端可以是任何连接到数据库的应用程序。常见的客户端有:
    • 命令行客户端(如 mysql 命令行工具)。
    • 使用 MySQL 驱动程序的应用程序(如 PHP、Java、Python 中的数据库驱动)。
    • 图形化客户端(如 MySQL Workbench)。
  • 客户端通过网络发送 SQL 请求到 MySQL 服务器,并从服务器接收响应。

2. 连接层(Connection Layer)

  • 连接管理:MySQL 服务器接收到来自客户端的连接请求。连接层负责管理客户端与 MySQL 服务器之间的连接。它的主要任务是:
    • 认证:验证客户端的身份(如用户名、密码)。
    • 连接管理:处理并维护多个并发客户端的连接,包括连接的创建、维护和关闭。
  • MySQL 支持多种连接方式(如 TCP/IP、Unix Socket、命名管道等)。

3. 查询解析层(Query Parsing Layer)

  • 查询解析:客户端提交的 SQL 查询首先会被查询解析器处理。解析器将 SQL 查询语句转化为内部的结构,分为两个主要部分:
    • 词法分析:将 SQL 查询中的字符流转化为标记(token)。
    • 语法分析:分析标记的顺序和语法,构建抽象语法树(AST)。
  • 该层的主要任务是理解 SQL 查询的意图,检查语法是否正确。

4. 优化层(Optimization Layer)

  • 查询优化器:优化器的任务是选择最优的执行计划,以最有效率的方式执行查询。它会根据不同的查询条件和数据库表的结构来选择合适的执行方式。
  • 关键的优化步骤包括:
    • 选择执行计划:优化器可能会选择不同的查询计划,例如使用索引扫描或全表扫描。
    • 重新排序操作:例如在多个表的联接时,优化器会选择合适的连接顺序。
    • 选择最佳算法:如嵌套循环连接、哈希连接等。
  • 查询优化是 MySQL 性能的重要组成部分。

5. 执行层(Execution Layer)

  • 查询执行器:优化后的查询会传递给执行器,执行器负责实际执行查询并返回结果。执行器会根据执行计划调用相关的存储引擎来获取数据。
  • 执行层包括:
    • 执行查询操作(如插入、删除、更新)。
    • 数据的检索操作(如 select 查询)。

6. 存储引擎层(Storage Engine Layer)

  • 存储引擎:这是 MySQL 最底层的一个重要组件,负责实际的物理存储操作。不同的存储引擎有不同的存储格式和功能特性。常见的存储引擎包括:
    • InnoDB:默认的事务性存储引擎,支持事务、行级锁、外键等特性。
    • MyISAM:不支持事务,但提供较高的查询性能,适用于读取密集型应用。
    • Memory:基于内存的存储引擎,数据存储在内存中,速度非常快,但数据会在 MySQL 重启时丢失。
    • CSV:将数据存储为 CSV 格式文件。
    • NDB:用于 MySQL Cluster 的分布式存储引擎。
  • 存储引擎层负责数据的实际存取和管理操作,包括读取、写入、索引操作等。

7. 缓冲池层(Buffer Pool Layer)

  • 缓存管理:MySQL 通过内存中的缓冲池来缓存数据页、索引页等常用的数据,减少磁盘I/O的次数,提高性能。
  • InnoDB 引擎的缓冲池:InnoDB 存储引擎通过缓冲池来存储表数据、索引、Undo 日志等。频繁访问的数据会被缓存到内存中,从而提高查询效率。

8. 日志层(Logging Layer)

  • 日志系统:MySQL 使用不同类型的日志来确保数据的持久性和恢复能力:
    • 错误日志:记录服务器启动、停止或运行时的错误信息。
    • 查询日志:记录所有执行的查询语句。
    • 慢查询日志:记录执行时间超过阈值的查询语句,主要用于性能分析。
    • 二进制日志(Binlog):记录所有更改数据库数据的操作,用于复制和数据恢复。
    • 事务日志(Redo Log):InnoDB 存储引擎使用的日志,保证事务的持久性(即事务的 ACID 属性)。

9. 复制与高可用层(Replication and High Availability Layer)

  • 复制:MySQL 支持主从复制,通过 二进制日志(Binlog)复制线程 将主数据库的变更同步到从数据库
  • 高可用性:MySQL 支持多种高可用性方案,如主从复制、组复制、MySQL Cluster 和使用代理软件(如 ProxySQL)等来实现故障切换和负载均衡。

MySQL 的体系结构分为多个层次,从客户端到存储引擎,每个层次都有不同的组件和职责。整体架构中,MySQL 的查询请求从客户端层通过连接层传入,经过查询解析、优化和执行,最终由存储引擎进行数据的实际存取和操作。具体结构如下图: 

四、数据库设计的三范式及反范式

 在设计数据库中的数据表时,我们的设计原则是尽可能减少数据冗余,即减少数据存储大小节约磁盘空间,根据该原则产生了数据库设计额定三范式:

1、列的原子性:所有字段的值必须是原子的,不可再分;

2、满足第一范式的前提下,表中的每列都必须完全依赖于主键,不能只依赖主键的一部分(避免部分依赖);

3、满足第二范式的前提下,表中的每列都直接依赖于主键,而不是通过其他非主键列间接依赖(避免传递依赖);

什么是反范式?即我们有时需要违背数据库设计原则来换取查询效率,若我们完全遵守原则设计数据库,可能导致出现多张表,那我们查询时也会访问多张表,导致查询效率变低,因此在设计数据表时可以适时使用反范式。

五、MySQL的基本操作

MySQL的基础操作很多,这里就只列一些重要的,其余的读者可自行查阅资料。

1. 聚合函数

操作SQL 语句
计算总数SELECT COUNT(*) FROM users;
计算平均值SELECT AVG(age) FROM users;
计算最大值SELECT MAX(age) FROM users;
计算最小值SELECT MIN(age) FROM users;
计算总和SELECT SUM(age) FROM users;

2. 分组查询(GROUP BY)

操作SQL 语句
按年龄分组,计算每个年龄段的人数SELECT age, COUNT(*) FROM users GROUP BY age;
按部门统计平均薪资SELECT department, AVG(salary) FROM employees GROUP BY department;
按订单状态统计订单总数SELECT status, COUNT(*) FROM orders GROUP BY status;
统计每个城市的用户数量SELECT city, COUNT(*) FROM users GROUP BY city;

3. 过滤分组结果(HAVING)

操作SQL 语句
统计用户数大于 2 的年龄段SELECT age, COUNT(*) FROM users GROUP BY age HAVING COUNT(*) > 2;
统计薪资平均值超过 5000 的部门SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 5000;

4. 结合 WHERE 和 GROUP BY

操作SQL 语句
统计 30 岁以上用户的数量(先筛选再分组)SELECT age, COUNT(*) FROM users WHERE age > 30 GROUP BY age;

http://www.ppmy.cn/news/1576605.html

相关文章

git命令学习记录

1. git reset 参数说明 git reset 是用来回退版本的,它可以添加三个参数,常用的使用格式是这样的:git reset [--hard | --soft | --mixed] 版本号 一般使用git修改文件并提交需要三步,第一步在文本编辑器中编辑文件,也…

爬虫:一文掌握 Celery 分布式爬虫,及对应实战案例

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 1. Celery 简介1.1 什么是 Celery?1.2 Celery 的核心组件2. 环境准备2.1 安装依赖2.2 启动 Redis3. 创建 Celery 分布式爬虫3.1 项目结构3.2 编写 Celery 任务3.3 启动 Worker3.4 分发任务4. 分布式部署4.1 多台机器部…

Java 入门 (超级详细)

一、什么是Java Java是一种高级编程语言,由Sun Microsystems公司于1995年推出。Java具有跨平台性、面向对象、健壮性、安全性、可移植性等特点,被广泛应用于企业级应用开发、移动应用开发、大数据处理、云计算等领域。Java程序可以在不同的操作系统上运…

基于FPGA的一些常识问题

1.FPGA(现场可编程门阵列)主要由以下几个部分构成‌: ‌1、可编程逻辑单元(CLB)‌:CLB是FPGA的基本逻辑单元,负责执行大部分的逻辑运算。每个CLB包含一个可配置开关矩阵,该矩阵由多…

【目标检测】目标检测中的数据增强终极指南:从原理到实战,用Python解锁模型性能提升密码(附YOLOv5实战代码)

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

【Linux vi文本编辑器使用指南】

Linux vi文本编辑器使用指南 一、模式切换二、启动与退出三、光标移动(命令模式)四、编辑文本五、查找与替换六、其他实用命令七、示例流程八、学习建议 Linux系统中的 vi(及其增强版 vim)是一款功能强大的文本编辑器&#xff0…

嵌入式产品级-超小尺寸游戏机(从0到1 硬件-软件-外壳)

Ultra-small size gaming console。 超小尺寸游戏机-Pico This embedded product is mainly based on miniaturization, followed by his game functions are also very complete, for all kinds of games can be played, and there will be relevant illustrations in the fo…

距离度量优化与缓存技术——距离度量优化与缓存技术

假设你在处理一个拥有50万条文本数据的分类任务,使用KNN算法时,每次预测需要遍历所有样本计算余弦相似度——单次预测耗时超过20秒,用户等待时间足以让实时推荐系统崩溃。 核心矛盾:距离计算是KNN的核心操作,但也是性…