Sql 简明教程

SQL - Temporary Tables

What are Temporary Tables?

临时表的名称很好地描述了它们的目的:它们是在数据库中创建的用于存储临时数据的表。我们可以执行与永久表类似的 SQL 操作,例如 CREATE、UPDATE、DELETE、INSERT、JOIN 等。但是,一旦当前客户端会话终止,这些表将被自动删除。此外,如果用户决定手动删除它们,也可以显式删除它们。

与 MySQL 等各种 RDBMS 一样,它们从版本 3.23 开始支持临时表。如果您使用的是低于 3.23 的 MySQL 旧版本,则无法使用临时表,但可以使用 heap tables

如前所述,临时表仅在客户端会话存续期间才会存在。如果您在 PHP 脚本中运行代码,那么临时表将在脚本执行完毕后自动销毁。如果您通过 MySQL 客户端程序连接到 MySQL 数据库服务器,那么临时表将在您关闭客户端连接或手动销毁该表之前一直存在。

Creating Temporary Tables in MySQL

要在 MySQL 中创建临时表,我们遵循与创建常规数据库表相同的查询。但是,您将使用 CREATE TEMPORARY TABLE statement. ,而不是使用 CREATE TABLE 语句。

Syntax

以下是创建临时表的语法:

CREATE TEMPORARY TABLE table_name(
   column1 datatype,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
   PRIMARY KEY( one or more columns )
);

Example

以下是用于在 MySQL 数据库中创建临时表的 SQL 查询:

CREATE TEMPORARY TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

就像普通表一样,您可以使用 INSERT 语句将数据插入临时表中。以下查询向上述创建的临时表中插入 3 条记录:

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00 ),
(2, 'Khilan', 25, 'Delhi', 1500.00 ),
(3, 'Kaushik', 23, 'Kota', 2000.00 );

将创建临时表 CUSTOMERS ,它将有如下记录:

ID

NAME

AGE

ADDRESS

SALARY

1

Ramesh

32

Ahmedabad

2000.00

2

Khilan

25

Delhi

1500.00

3

Kaushik

23

Kota

2000.00

当您发出 SHOW TABLES 命令时,您的临时表不会显示在表列表中。要验证是否已创建临时表,您需要使用 SELECT 语句检索其数据。由于在当前会话关闭时所有临时表都将被删除,因此如果您注销 MySQL 会话然后发出 SELECT 命令,那么您将找不到数据库中的临时表。

Dropping Temporary Tables in MySQL

虽然当您的数据库连接终止时所有临时表都会被 MySQL 删除,但如果您仍想手动删除它们,那么您可以通过发出 DROP TEMPORARY TABLE 命令来进行删除。

Syntax

以下是删除临时表的基本语法:

DROP TEMPORARY TABLE table_name;

Example

以下查询删除了前面示例中创建的临时表 CUSTOMERS

DROP TEMPORARY TABLE CUSTOMERS;

Verification

由于我们已经删除了临时表 CUSTOMERS,因此如果您尝试使用 SELECT 语句检索其内容,那么它将生成一条错误消息,指出该表不存在。

SELECT * FROM CUSTOMERS;

这将生成以下结果:

ERROR 1146: Table 'TUTORIALS.CUSTOMERS' doesn't exist

Temporary Tables in SQL Server

在 MySQL 中创建的临时表仅在当前会话中可见。但是,在 Microsoft SQL Server 中您可以创建两类临时表。

  1. Local Temporary Tables: 局部临时表仅可由创建它的会话访问。创建它的连接关闭时,它会自动删除。如果在存储过程中创建了临时表,则在存储过程执行完成后,它将自动删除。

  2. Global Temporary Tables: 全局临时表对所有连接都是可见的,并在引用该表的最后一个连接关闭时删除。

Syntax of the Local Temporary Tables

要在 SQL Server 中创建局部临时表,单个 # 用作表名的前缀,如下所示:

CREATE TABLE #table_name(
   column1 datatype,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
   PRIMARY KEY( one or more columns )
);

Example of the Local Temporary Tables

以下查询在 SQL Server 中创建名为 CUSTOMERS 的局部临时表:

CREATE TABLE #CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

Syntax of the Global Temporary Tables

要创建全局临时表,我们需要在表名前加上前缀 ## ,如下所示:

CREATE TABLE ##table_name(
   column1 datatype,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
   PRIMARY KEY( one or more columns )
);

Example of the Global Temporary Tables

以下查询在 SQL Server 中创建名为 Buyers 的全局临时表:

CREATE TABLE ##Buyers(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25) ,
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

Dropping Temporary Tables in SQL Server

如果你想在 SQL Server 中手动删除临时表,则需要通过在局部临时表名前放置 和在全局临时表名前放置 # 来执行 DROP TABLE 语句。

Example

以下查询删除前面示例中创建的局部临时表 Customers

DROP TABLE #Customers;

同时,以下查询删除全局临时表 Buyers

DROP TABLE ##Buyers;