MySQL 执行 SQL 语句的流程详解
MySQL 是一种开源的,常见的关系型数据库管理系统。SQL (Structured Query Language)是一种用于管理关系型数据库的语言。在进行数据库操作时,我们需要编写 SQL 语句,MySQL 会根据 SQL 语句的执行计划实现数据的存储和管理。
MySQL 执行 SQL 语句的步骤
1. 连接数据库
当我们在终端使用命令行工具如 mysql 命令进入 MySQL 后,就会连接到 MySQL 数据库中,此时 MySQL 会从客户端接收到一条 SQL 语句。如果 MySQL 没有接收到任何 SQL 语句,那么它会一直保持监听状态,等待客户端发送数据。
2. 词法分析
MySQL 会将接收到的 SQL 语句进行语法分析,判断语句的语法是否正确,并将语句分解为多个 Token,即单词,每个单词表示为 Token 的一部分。
举个例子,当我们编写 SQL 代码如下时:
SELECT * FROM users WHERE age > 18;
MySQL 会将代码分解为以下单词(这些单词我们称之为 Token):
Token[0] = SELECT
Token[1] = *
Token[2] = FROM
Token[3] = users
Token[4] = WHERE
Token[5] = age
Token[6] = >
Token[7] = 18
Token[8] = ;
3. 语法分析
MySQL 将单词组合成完整的语句,生成 AST (Abstract Syntax Tree) 抽象语法树,执行时会根据这个抽象语法树实现 SQL 语句的执行。
举个例子,对于如下 SQL 语句:
SELECT * FROM users WHERE age > 18;
MySQL 会将其解析为:
stmt
|-> Select_stmt
|-> SELECT
|-> SELECT_LIST -> *
|-> FROM clause -> users
|-> WHERE clause
|-> age
|-> >
|-> value -> 18
4. 执行 SQL 语句
MySQL 在执行 SQL 语句前,会先进行一次性的优化并生成执行计划,执行计划指明了 SQL 执行的具体逻辑。
MySQL 执行 SQL 语句的步骤如下:
- 根据 MySQL 的执行计划逻辑,依次读取数据表的数据;
- 判断表中每条数据的字段信息是否满足 SQL 语句的查询条件;
- 将满足查询条件的数据进行筛选并且组合成符合查询条件的新数据集;
- 返回结果集给 MySQL 客户端。
5. 断开连接
MySQL 将结果返回给客户端完成后,就会与客户端断开连接。
SQL 执行实例
下面我们来了解一个简单的示例,该示例包含表 orders 和 users,其中 orders 表含有用户订单的数据,而 users 表包含用户的个人信息数据。现在我们需要查询购买商品ID为1的用户的信息和其订单的相关信息, SQL 语句如下:
SELECT users.username, users.email, orders.order_id, orders.order_date, orders.amount
FROM orders
LEFT JOIN users ON orders.user_id = users.user_id
WHERE orders.goods_id = 1;
- 连接数据库后,将 SQL 语句发送给 MySQL;
- MySQL 将 SQL 语句进行词法分析,生成如下的 Token 数组:
Token[0] = SELECT
Token[1] = users.username,
Token[2] = users.email,
Token[3] = orders.order_id,
Token[4] = orders.order_date,
Token[5] = orders.amount
Token[6] = FROM
Token[7] = orders
Token[8] = LEFT JOIN
Token[9] = users
Token[10] = ON orders.user_id = users.user_id
Token[11] = WHERE
Token[12] = orders.goods_id
Token[13] = =
Token[14] = 1
- MySQL 进行语法分析,并生成如下的抽象语法树:
stmt
|-> Select_stmt
|-> SELECT
|-> SELECT_LIST
|-> users.username
|-> users.email
|-> orders.order_id
|-> orders.order_date
|-> orders.amount
|-> FROM clause -> orders
|-> LEFT JOIN
|-> users
|-> ON clause
|-> left -> orders
|-> user_id
|-> right -> users
|-> user_id
|-> WHERE clause
|-> orders.goods_id
|-> =
|-> value -> 1
- MySQL 根据执行计划递归搜索数据表 orders 和 users,依次判断每一条数据是否符合查询条件,生成结果集输出:
username email order_id order_date amount
张三 zhangsan@qq.com 1 2022-01-01 00:00:00 199.99
李四 lisi@qq.com 3 2022-01-03 00:00:00 69.99
总结
MySQL 执行 SQL 语句可能涉及到许多隐藏的细节,但总体上可以分成连接数据库,词法分析,语法分析,执行 SQL 语句和断开连接等阶段。我们需要深入了解每个阶段的作用和执行过程,并且能够优化我们的 SQL 语句,从而使查询更加高效、准确。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL执行SQL语句的流程详解 - Python技术站