SQL 临时表
什么是临时表
临时表基本上就是字面上的意思:它们是在数据库中创建的用于存储临时数据的表。我们可以执行类似于永久表上的SQL操作,如CREATE、UPDATE、DELETE、INSERT、JOIN等。但是这些表在当前的客户端会话终止后将自动删除。此外,如果用户决定手动删除它们,它们也可以被显式删除。
各种关系型数据库管理系统(RDBMS),如MySQL,从3.23版本开始支持临时表。如果你使用的是比3.23版本旧的MySQL,你就无法使用临时表,但可以使用 堆表 。
如前所述,临时表只会在客户端会话有效期内存在。如果你在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 )
);
示例
以下是在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命令,您将无法在数据库中找到临时表。 在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服务器中创建一个名为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服务器中创建了一个名为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;