MySQL 临时表

MySQL 临时表

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> CREATE TEMPORARY TABLE table_name (
   column_1, column_2, ..., table_constraints
);

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

Mysql> CREATE TEMPORARY TABLE temporary_table_name SELECT * FROM original_table_name LIMIT 0;

MySQL临时表示例

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

mysql> CREATE TEMPORARY TABLE Students( student_name VARCHAR(40) NOT NULL, total_marks DECIMAL(12,2) NOT NULL DEFAULT 0.00, total_subjects INT UNSIGNED NOT NULL DEFAULT 0);

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

MySQL 临时表

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

mysql>INSERT INTO Students(student_name, total_marks, total_subjects) VALUES ('Joseph', 150.75, 2), ('Peter', 180.75, 2);

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

MySQL 临时表

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

mysql> SELECT * FROM Students;

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

MySQL 临时表

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

一种基于普通表结构的临时表

在这个例子中,我们将创建一个临时表,其结构基于数据库中已有的表。

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

MySQL 临时表

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

CREATE TEMPORARY TABLE temp_customers
SELECT c.cust_name, c.city, o.prod_name, o.price 
FROM orders o
INNER JOIN customer c ON c.cust_id = o.order_id
ORDER BY o.price DESC;

当我们执行以上语句时,将会得到以下的消息:

MySQL 临时表

现在,运行下面的命令查看临时表:

mysql> SELECT * FROM temp_customers;

MySQL 临时表

我们还可以从上述临时表” temp_customers “执行类似于从永久表中查询数据的查询操作。以下查询更清晰地解释了这一点:

Mysql> SELECT cust_name, prod_name, price FROM temp_customers;

执行上述语句后,将给出以下输出结果:

MySQL 临时表

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

如何在MySQL中删除临时表

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

mysql> DROP TEMPORARY TABLE table_name;

这个查询不会删除数据库中的永久表,只会删除临时表。如果我们尝试使用这个语句删除永久表,它会抛出一个错误消息,说你正在删除一个未知的表。例如,如果我们想要删除上面的临时表”temp_customers”,我们需要使用以下语句:

mysql> DROP TEMPORARY TABLE top_customers;

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程