如何创建和使用MySQL临时表

2,734 阅读3分钟

MySQL临时表是一种独特的表类型,允许你在单个用户会话中临时存储数据。MySQL临时表与普通的MySQL表没有什么不同,除了它是不稳定的。

一旦一个表在一个特定的用户会话中被初始化,只有该用户可以查看、编辑或删除该表。其他登录的用户不能访问它。一旦一个会话死亡,MySQL就会自动放弃该表和存储在其中的数据。

在本教程中,我们将快速讨论如何创建和使用MySQL临时表。

注意: 对MySQL临时表的支持从MySQL服务器3.2版及以上开始。如果你使用的是旧版本,你可能无法使用特定的功能。

如何创建一个临时表?

创建临时表的过程和语法与你用来创建普通表的过程和语法非常相似。

但是,你需要在语句中指定TEMPORARY关键字。我们可以将查询表述为

CREATE TEMPORARY TABLE table_name (
Columns,
table_constraints
);

你可以指定任何表名,只要它不与主表冲突。

尽管你可以创建一个与主表同名的临时表,但这并不是一个好的做法,因为它可能会导致混乱,并可能导致数据丢失。

例1
下面的查询说明了如何创建一个MySQL临时表并在其中存储数据。

首先,登录到一个MySQL会话。

mysql -u root -p

登录后,创建一个样本数据库。

CREATE DATABASE IF NOT EXISTS temp_db;

在下一步,改变数据库并使用查询创建一个临时表。

USE temp_db;
CREATE TEMPORARY TABLE temp_tb (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100) NOT NULL, email VARCHAR(255));

一旦你创建了一个临时表,你可以使用填充和更新普通MySQL表的相同过程插入和更新存储在上面的数据。

例如,使用下面的查询,向上面创建的temp_tb插入样本数据。

INSERT INTO temp_tb (username, email)
VALUES ('t00r', 'info@sample.db'),
('db_user', 'dev@mysql.db'),
('z3ro', 'zero@info.com');

一旦你有了数据,你就可以使用普通的SQL SELECT语句从中选择数值。

SELECT * FROM temp_tb;
+----+----------+----------------+
| id | username | email          |
+----+----------+----------------+
|  1 | t00r     | info@sample.db |
|  2 | db_user  | dev@mysql.db   |
|  3 | z3ro     | zero@info.com  |
+----+----------+----------------+
3 rows in set (0.00 sec)

例2
MySQL临时表的一个
更常见的使用情况是存储另一个表的值,这可能很有用,特别是当你有一个长的脚本访问数据库的时候;防止其他查询发生。

让我们考虑一下sakila样本数据库。我们可以用查询的方式在客户表的基础上创建一个临时表。

USE sakila;

一旦进入数据库,使用下面的查询。

CREATE TEMPORARY TABLE customer_temp SELECT * FROM customer LIMIT 0;

一旦查询被成功执行,你可以使用DESC语句来验证这些表是否包含类似的信息,如。

如何重命名一个临时表?

与普通的MySQL表不同,你不能使用RENAME语句目录来重命名一个临时表。

要实现这一点,你可以使用ALTER TABLE查询。

例如,要把临时表从customer_temp重命名为cust_temp;我们可以使用查询。

ALTER TABLE customer_temp RENAME cust_temp;

如何删除一个临时表?

要删除一个临时表,使用DROP TEMPORARY TABLE语句。使用TEMPORARY关键字可以确保你不会意外地删除一个正常的表。

DROP TEMPORARY TABLE cust_temp;

回顾一下

MySQL临时表允许你为单个用户会话临时存储信息。以下是MySQL临时表的属性。

  1. 我们通过指定TEMPORARY关键字来创建它们。
  2. 它们不存在于单个用户会话之外。
  3. 它们是不稳定的,在用户会话结束后会被删除。
  4. 它们的功能类似于正常的MySQL表。
  5. 它们可以有与主表类似的名字(不推荐)。
  6. 一个用户会话中的两个表不能包含一个类似的名字。

这一次就到此为止。