SQL - 临时表



什么是临时表?

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

各种 RDBMS(如 MySQL)从 3.23 版开始支持临时表。如果您使用的 MySQL 版本早于 3.23,则无法使用临时表,但可以使用**堆表**。

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

在 MySQL 中创建临时表

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

语法

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

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

示例

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

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 命令,则在数据库中找不到临时表。

在 MySQL 中删除临时表

尽管当您的数据库连接终止时,所有临时表都将被 MySQL 删除,但如果您想手动删除它们,则可以通过发出**DROP TEMPORARY TABLE**命令来实现。

语法

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

DROP TEMPORARY TABLE table_name;

示例

以下查询删除了在上一个示例中创建的临时表**CUSTOMERS** -

DROP TEMPORARY TABLE CUSTOMERS;

验证

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

SELECT * FROM CUSTOMERS;

这将产生以下结果 -

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

SQL Server 中的临时表

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

  • **本地临时表:**本地临时表仅在创建它的会话中可访问。在创建它的连接关闭时,它会自动删除。如果临时表是在存储过程中创建的,则在存储过程执行完成后,它会自动删除。

  • **全局临时表:**全局临时表对所有连接可见,并在引用该表的最后一个连接关闭时删除。

本地临时表的语法

要在 SQL Server 中创建本地临时表,请在表名前使用单个**#**作为前缀,如下所示 -

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

本地临时表的示例

以下查询在 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)
);

全局临时表的语法

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

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

全局临时表的示例

以下查询在 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)
);

在 SQL Server 中删除临时表

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

示例

以下查询删除了上一个示例中创建的本地临时表**Customers**。

DROP TABLE #Customers;

而以下查询删除了全局临时表**Buyers**。

DROP TABLE ##Buyers;
广告