临时表顾名思义,是一个临时的表,数据库不会将其序列化到磁盘上(有些也会序列化到磁盘上)而是存在于数据库服务器的内存中(因此会增加数据库服务器内存的消耗),在使用完之后就会销毁。
临时表分为两种:会话临时表和全局临时表,区别在于可用的作用域和销毁的时机不同。

1.SQL server临时表

        临时表分为两种:会话临时表和全局临时表,区别在于可用的作用域和销毁的时机不同。

  • 会话临时表只在当前会话(连接)内可用,且在当前会话结束(断开数据库连接)后就会销毁;
  • 全局临时表创建后在销毁之前所有用户都可以访问,销毁的时机是在创建该临时表的连接断开且没有其他会话访问时才销毁,实际上在创建全局临时表的会话断开后,其他用户就已经不能在访问该临时表了,但此时该临时表并不会立即销毁,而是等所有正在使用该全局临时表的会话(或者说连接)断开之后才会销毁。当然有时考虑到内存占用的问题,我们也可以手动销毁(DROP)临时表。

sql server临时表的创建

  • 会话临时表:以 “#”作为前缀,后面加上表名
  • 全局临时表:以 “##”作为前缀,后面加上表名

创建方式一:

1
2
3
4
5
6
7
8
9
10
11
12
13
#会话临时表
CREATE TABLE #临时表名(
字段1 约束条件1,
字段2 约束条件2,
...
);

#全局临时表
CREATE TABLE ##临时表名(
字段1 约束条件,
字段2 约束条件,
...
);

创建方式二:

1
2
3
4
5
6
7
#会话临时表
SELECT 字段列表 INTO #临时表名
FROM 业务表;

#全局临时表
SELECT 字段列表 INTO ##临时表名
FROM 业务表;

临时表的使用:

1
2
3
#查询临时表
SELECT * FROM #临时表名;
SELECT * FROM ##临时表名;

临时表的删除:

1
2
3
#删除临时表
DROP TABLE #临时表名;
DROP TABLE ##临时表名;

2.mysql临时表

MySQL临时表的创建: MySQL中没有全局临时表,创建时候没有“#”

1
2
3
4
5
6
7
8
9
10
11
CREATE TEMPORARY TABLE [IF NOT EXISTS] 临时表名(
字段1 约束条件,
字段2 约束条件,
...
);

#根据现有表创建临时表
CREATE TEMPORARY TABLE [IF NOT EXISTS] 临时表名
[AS] SELECT 查询字段
FROM 业务表
[WHERE 条件];

MySQL临时表的使用: 创建的临时表可以和业务表同名,若临时表和业务表同名则在该会话中会使用临时表

1
select * from 临时表名

MySQL临时表的删除:为避免临时表名和业务表名相同时导致误删除,可以加上TEMPORARY关键字

1
DROP [TEMPORARY] TABLE 临时表名;

3.Oracle临时表

Oracle的临时表也只有会话级的,但同时又细化出了一个事务级别的临时表,事务级别的临时表只在当前事务中有效。

Oracle临时表的创建:

1
2
3
4
5
6
7
8
9
10
11
12
13
#会话级别:当COMMIT的时候保留数据,当会话结束删除数据
CREATE GLOBAL TEMPORARY TABLE 临时表名(
字段1 约束条件,
字段2 约束条件,
...
) ON COMMIT PRESERVE ROWS;

#事务级别:当COMMIT的时候删除数据(默认情况)
CREATE GLOBAL TEMPORARY TABLE 临时表名(
字段1 约束条件,
字段2 约束条件,
...
) ON COMMIT DELETE ROWS;

oracle临时表的删除

1
DROP TABLE 临时表名;

注意:一个SQL中不能同时出现两次临时表


 评论

联系我 | Contact with me

Copyright © 2019-2020 谁知你知我,我知你知深。此恨经年深,比情度日久

博客内容遵循 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 协议