MySQL 临时表
MySQL具有创建称为
Temporary Table 的特殊表的功能,该表使我们能够
保留临时数据。我们可以在特定会话中多次重用此表。 MySQL在
版本3.23 及更高版本中可供用户使用,因此,如果我们使用旧版本,则无法使用此表。该表仅在
当前会话中可见且可访问。只要当前会话关闭或用户终止连接,MySQL就会自动删除该表。我们还可以使用
DROP TABLE 命令在用户为
如果我们使用
PHP 脚本要运行代码,只要脚本执行完毕,该表就会自动删除。如果用户通过MySQL客户端与服务器连接,则该表将一直存在,直到用户关闭MySQL客户端程序或终止连接或手动删除该表为止。
临时表提供了非常有用的帮助灵活的功能使我们能够快速完成复杂的任务,例如当我们查询需要单个 SELECT语句且带有 JOIN 子句。在这里,用户可以使用该表保留输出并执行另一个查询来处理它。
MySQL 具有许多功能,如下所示:
MySQL使用CREATE TEMPORARY TABLE语句创建一个临时表。
仅当MySQL服务器具有CREATE TEMPORARY TABLES特权时,才可以使用此语句。
创建它的客户端可以看到并访问它,这意味着两个不同的客户端可以使用具有相同名称的临时表而不会彼此冲突。这是因为该表只能由创建它的那个客户看到。因此,用户无法在同一会话中创建两个具有相同名称的临时表。
当用户关闭会话或手动终止连接时,MySQL中的临时表将自动删除。
用户可以使用与数据库中的普通表相同的名称来创建临时表。例如,如果用户使用名称" 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>INSERT INTO Students(student_name, total_marks, total_subjects) VALUES ('Joseph', 150.75, 2), ('Peter', 180.75, 2);
执行上面的语句后,将给出以下输出:
现在,运行以下查询以获取结果:
mysql> SELECT * FROM Students;
成功执行以上语句后,我们将获得如下输出:
请注意,当我们运行
SHOW TABLES 命令,那么我们的临时表将不会显示在列表中。另外,如果我们关闭当前会话,然后执行SELECT语句,则会收到一条消息,指出数据库中没有可用数据,甚至临时表也将不存在。
临时表,其结构基于普通表
在此示例中,我们将创建一个临时表,其结构基于数据库中已经可用的表。
假设我们的数据库具有以下永久表:
在这里,结构通过使用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> SELECT * FROM temp_customers;
我们还可以从上述临时表"
temp_customers中执行查询",类似于从永久表中查询数据。以下查询对其进行了更清晰的说明:
Mysql> SELECT cust_name, prod_name, price FROM temp_customers;
执行上面的语句后,将提供如下输出:
注意: 注意,我们可以使用IF NOT EXISTS关键字来避免"表已存在"错误。
如何在MySQL中删除临时表
MySQL允许我们使用 DROP TABLE 语句。但是,在DROP TABLE语句中使用
TEMPORARY 关键字是一种很好的做法。当临时表和永久表中的名称相同时,此关键字可帮助我们避免删除永久表的错误。当前会话,因此,建议使用以下查询删除临时表:
mysql> DROP TEMPORARY TABLE table_name;
此查询不会删除数据库的永久表,这意味着它仅删除临时表。如果我们尝试使用此语句删除永久表,它将抛出一条错误消息,提示您正在删除表是未知的。例如,如果要删除上面的临时表" temp_customers",则需要使用以下语句:
mysql> DROP TEMPORARY TABLE top_customers;