MySQL 临时表

17 Mar 2025 | 5 分钟阅读

MySQL 有一个称为临时表的特殊功能,允许我们保存临时数据。我们可以在特定会话中多次重用此表。它在 MySQL 中从3.23及以上版本可用,如果您使用的是旧版本,则无法使用此表。此表仅对当前会话可见和可访问。只要当前会话关闭或用户终止连接,MySQL 就会自动删除此表。我们也可以使用DROP TABLE命令在用户不再使用时显式删除此表。

如果我们使用PHP 脚本来运行代码,当脚本执行完毕后,此表会自动删除。如果用户通过 MySQL 客户端连接到服务器,则此表将一直存在,直到用户关闭 MySQL 客户端程序或终止连接或手动删除该表。

临时表提供了一个非常有用且灵活的功能,可以帮助我们快速完成复杂的任务,例如当查询数据需要单个 SELECT 语句配合 JOIN 子句时。此时,用户可以使用此表来保存输出并执行另一个查询来处理它。

MySQL 中的临时表具有许多功能,如下所示:

  • MySQL 使用 CREATE TEMPORARY TABLE 语句来创建临时表。
  • 此语句只能在 MySQL 服务器具有 CREATE TEMPORARY TABLES 权限时使用。
  • 它可以被创建它的客户端看到和访问,这意味着两个不同的客户端可以使用同名的临时表而不会相互冲突。这是因为此表只能被创建它的那个客户端看到。因此,用户不能在同一会话中创建两个同名的临时表。
  • 当用户关闭会话或手动终止连接时,MySQL 中的临时表会自动删除。
  • 用户可以创建一个与数据库中普通表同名的临时表。例如,如果用户创建了一个名为 student 的临时表,那么现有的 student 表将无法访问。因此,用户对 student 表执行的任何查询都将指向临时 student 表。当用户删除临时表时,永久 student 表将再次变得可访问。

创建临时表的语法

在 MySQL 中,创建临时表的语法与创建普通表语句的语法相同,只是多了 TEMPORARY 关键字。让我们看以下创建临时表的语句:

如果用户想创建一个结构与数据库中现有表相同的临时表,则不能使用上述语句。相反,我们使用如下所示的语法:

MySQL 临时表示例

让我们了解如何在 MySQL 中创建临时表。执行以下语句,在选定的数据库中创建一个临时表:

我们可以看到下面的图片:

MySQL Temporary Table

接下来,我们需要向临时表中插入值:

执行上述语句后,将得到如下输出:

MySQL Temporary Table

现在,运行以下查询以获取结果:

成功执行上述语句后,我们将得到如下输出:

MySQL Temporary Table

需要注意的是,当我们运行 SHOW TABLES 命令时,我们的临时表不会显示在列表中。此外,如果我们关闭当前会话然后执行 SELECT 语句,我们将收到一条消息,提示数据库中没有可用数据,甚至临时表也不存在。

基于普通表结构的临时表

在此示例中,我们将创建一个结构基于数据库中已可用表的临时表。

假设我们的数据库有以下永久表:

MySQL Temporary Table

这里,临时表的结构是通过 SELECT 语句创建的,并使用 INNER JOIN 子句合并两个表,并根据价格进行排序。在 MySQL 提示符下输入以下语句:

执行上述语句后,我们将收到以下消息:

MySQL Temporary Table

现在,运行以下命令来查看临时表:


MySQL Temporary Table

我们还可以像查询永久表一样,对上述临时表“temp_customers”执行查询。以下查询对此进行了更清晰的说明:

执行上述语句后,将得到如下输出:

MySQL Temporary Table

注意:请注意,我们可以使用 IF NOT EXISTS 关键字来避免“表已存在”的错误。

如何在 MySQL 中删除临时表

MySQL 允许我们使用 DROP TABLE 语句删除临时表。但是,在 DROP TABLE 语句中使用 TEMPORARY 关键字是一个好习惯。此关键字有助于我们避免在当前会话中临时表和永久表具有相同名称时误删永久表。因此,建议使用以下查询删除临时表:

此查询不会删除数据库的永久表,这意味着它只删除临时表。如果我们尝试使用此语句删除永久表,它将抛出错误消息,提示您正在删除的表未知。例如,如果我们想删除上面的临时表“temp_customers”,我们需要使用以下语句:


下一个主题MySQL 复制表