MySQL 临时表与会话数据

MySQLMySQLBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在本次实验中,你将学习如何在 MySQL 中使用临时表,重点是在会话中创建和使用临时表。你将首先以 root 用户身份连接到 MySQL 服务器,并创建一个名为 temp_employees 的临时表,该表包含 idnamedepartment 列。

创建临时表后,你将使用 DESCRIBE 命令描述其结构,以此验证表是否存在。这将确认表已创建,并显示其列定义,包括数据类型和约束。然后,本实验将指导你在临时表中插入和查询数据,展示其在特定会话数据操作中的实用性。最后,你将探索临时表的作用域,并学习如何显式删除它们。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mysql(("MySQL")) -.-> mysql/BasicKeywordsandStatementsGroup(["Basic Keywords and Statements"]) mysql(("MySQL")) -.-> mysql/DatabaseFunctionsandDataTypesGroup(["Database Functions and Data Types"]) mysql/BasicKeywordsandStatementsGroup -.-> mysql/create_table("Table Creation") mysql/BasicKeywordsandStatementsGroup -.-> mysql/drop_table("Table Removal") mysql/BasicKeywordsandStatementsGroup -.-> mysql/select("Data Retrieval") mysql/BasicKeywordsandStatementsGroup -.-> mysql/insert("Data Insertion") mysql/DatabaseFunctionsandDataTypesGroup -.-> mysql/int("Integer Type") mysql/DatabaseFunctionsandDataTypesGroup -.-> mysql/varchar("Variable Character Type") subgraph Lab Skills mysql/create_table -.-> lab-550917{{"MySQL 临时表与会话数据"}} mysql/drop_table -.-> lab-550917{{"MySQL 临时表与会话数据"}} mysql/select -.-> lab-550917{{"MySQL 临时表与会话数据"}} mysql/insert -.-> lab-550917{{"MySQL 临时表与会话数据"}} mysql/int -.-> lab-550917{{"MySQL 临时表与会话数据"}} mysql/varchar -.-> lab-550917{{"MySQL 临时表与会话数据"}} end

创建用于会话的临时表

在这一步中,你将学习如何在 MySQL 中创建临时表。临时表对于在会话期间存储中间结果很有用。会话结束时,它们会自动被删除。这使得它们非常适合数据操作和报告等需要临时工作空间的任务。

首先,让我们连接到 MySQL 服务器。在 LabEx 虚拟机中打开一个终端。你可以使用以下命令以 root 用户身份连接到 MySQL 服务器。系统会提示你输入 root 密码,密码是 password

mysql -u root -p

输入密码后,你应该会看到 MySQL 提示符:mysql>

现在,让我们创建一个临时表。创建临时表的语法与创建常规表类似,但需要使用 TEMPORARY 关键字。

CREATE TEMPORARY TABLE temp_employees (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255),
    department VARCHAR(255)
);

此命令创建了一个名为 temp_employees 的临时表,该表有三列:idnamedepartmentid 列是一个自增的主键。

你可以使用 SHOW TABLES 命令来验证表是否已创建。不过,SHOW TABLES 不会显示临时表。相反,你可以尝试描述该表:

DESCRIBE temp_employees;

此命令将显示 temp_employees 表的结构,从而确认该表已创建。输出应该类似于以下内容:

+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int          | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255) | YES  |     | NULL    |                |
| department | varchar(255) | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)

这确认了临时表 temp_employees 已在你当前的 MySQL 会话中成功创建。

插入和查询临时表数据

在这一步中,你将学习如何将数据插入到上一步创建的临时表中,然后查询这些数据。这将展示如何使用临时表在会话中存储和检索信息。

从上一步继续,你应该仍然以 mysql> 提示符连接到 MySQL 服务器。如果你没有连接,请使用以下命令重新连接:

mysql -u root -p

出现提示时输入密码 password

现在,让我们向 temp_employees 表中插入一些数据。使用 INSERT INTO 语句添加记录。

INSERT INTO temp_employees (name, department) VALUES ('Alice Smith', 'Sales');
INSERT INTO temp_employees (name, department) VALUES ('Bob Johnson', 'Marketing');
INSERT INTO temp_employees (name, department) VALUES ('Charlie Brown', 'IT');

这些命令向 temp_employees 表中插入了三行数据,包含每个员工的姓名和部门。

为了验证数据是否已正确插入,你可以使用 SELECT 语句查询该表。

SELECT * FROM temp_employees;

此命令将从 temp_employees 表中检索所有列和行。输出应该类似于以下内容:

+----+---------------+------------+
| id | name          | department |
+----+---------------+------------+
|  1 | Alice Smith   | Sales      |
|  2 | Bob Johnson   | Marketing  |
|  3 | Charlie Brown | IT         |
+----+---------------+------------+
3 rows in set (0.00 sec)

你还可以使用 WHERE 子句过滤数据。例如,要仅选择 'Marketing' 部门的员工:

SELECT * FROM temp_employees WHERE department = 'Marketing';

输出应该是:

+----+-------------+------------+
| id | name        | department |
+----+-------------+------------+
|  2 | Bob Johnson | Marketing  |
+----+-------------+------------+
1 row in set (0.00 sec)

这展示了如何使用标准 SQL 命令向临时表中插入数据并进行查询。这些数据仅在你当前的 MySQL 会话中可用。

验证临时表的作用域

在这一步中,你将验证临时表的作用域。临时表仅在创建它们的会话中可访问。为了证明这一点,你将打开一个新的 MySQL 会话并尝试访问 temp_employees 表。

首先,确保你仍然连接着上一步中的 MySQL 服务器。如果是,请保持该终端窗口打开。

现在,在 LabEx 虚拟机中打开一个新的终端窗口。你可以通过右键单击桌面并选择“在此处打开终端”来完成此操作。

在这个新终端中,以 root 用户身份连接到 MySQL 服务器:

mysql -u root -p

出现提示时输入密码 password。现在你有了两个独立的 MySQL 会话。

在这个新的会话中,尝试从 temp_employees 表中选择数据:

SELECT * FROM temp_employees;

你应该会看到类似以下的错误消息:

ERROR 1146 (42S02): Table 'test.temp_employees' doesn't exist

此错误消息确认了在第一个会话中创建的 temp_employees 表在这个新会话中不可见或不可访问。这是因为临时表是特定于会话的。

现在,尝试描述该表:

DESCRIBE temp_employees;

你也会得到一个错误:

ERROR 1146 (42S02): Table 'test.temp_employees' doesn't exist

这进一步证实了临时表仅存在于创建它的会话中。关闭新的终端窗口,然后回到你创建临时表的原始终端。你将在下一步中使用该终端。

删除临时表

在这一步中,你将显式删除之前创建的临时表。虽然临时表会在会话结束时自动删除,但在使用完后显式删除它们是一个好习惯。这样可以帮助释放资源,并避免在同一会话中稍后需要创建同名表时可能出现的命名冲突。

确保你仍然连接着创建 temp_employees 表的原始终端会话中的 MySQL 服务器。如果你没有连接,请使用以下命令重新连接:

mysql -u root -p

出现提示时输入密码 password

要删除临时表,请使用 DROP TEMPORARY TABLE 语句:

DROP TEMPORARY TABLE temp_employees;

此命令将从你当前的会话中移除 temp_employees 表。

为了验证该表已被删除,再次尝试从中选择数据:

SELECT * FROM temp_employees;

你应该会看到与上一步中从不同会话访问该表时相同的错误消息:

ERROR 1146 (42S02): Table 'test.temp_employees' doesn't exist

这确认了临时表已被成功删除。

现在,你可以通过输入以下内容退出 MySQL 监视器:

exit

这将使你断开与 MySQL 服务器的连接。

总结

在本次实验中,你学习了如何在 MySQL 会话中创建临时表。这包括使用 mysql -u root -p 命令连接到 MySQL 服务器,然后使用 CREATE TEMPORARY TABLE 语句定义表结构,包括列名、数据类型以及主键和自增字段等约束。

你还了解到,标准的 SHOW TABLES 命令不会显示临时表。相反,你可以使用 DESCRIBE 命令查看临时表的结构,确认已定义的列及其属性,以此验证临时表是否创建成功。