什么是临时表

本文深入解析Oracle数据库中两种临时表的特性:会话级别与事务级别。会话级临时表数据仅在当前会话周期内有效,事务级临时表则在事务提交后清空,跨会话无法访问。通过实例演示不同类型的临时表在数据持久性上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.会话级别临时表

会话级临时表是指临时表中的数据只在会话生命周期之中存在,当用户退出会话结束的时候,Oracle自动清除临时表中数据。
在这里插入图片描述
具体测试方法:
insert 之后(事物提交),select 能查询出来,但是这时当你在打开另一个会话窗口的时候再次查询,表内的数据就查询不到了。

2.事务级别的临时表

insert 之后(事物未提交),select 能查询出来,(但是当你事物提交之后,表中数据查询不到),而且当你开启另一个回话窗口时,同样表中数据查询不到。

### SQL Server 中临时表的概念 在 SQL Server 中,临时表是一种特殊类型的表格对象,用于存储和操作临时数据。这类表格具有两种主要形式: - **本地临时表**:名称前缀为单个井号 `#` 的表被称为本地临时表。这种表仅限于创建它的会话内可见并可用,在该会话结束后会被自动清除[^2]。 - **全局临时表**:名称带有双井号 `##` 前缀的表则表示全局临时表。它们不仅对创建者可见,而且在整个服务器实例中的任何地方都可被访问直到最后一个引用此表的会话终止为止[^3]。 这两种类型的临时表均存放在名为 `tempdb` 的系统数据库里;一旦超出其有效范围——无论是因为会话结束还是显式的删除命令执行完毕之后,就会从 `tempdb` 中移除[^1]。 #### 创建与管理临时表 为了更好地理解如何定义及控制临时表的生命期,下面给出了一段简单的 T-SQL 脚本来展示这一过程: ```sql -- 检查是否存在同名的旧版全局临时表,并尝试删除之 IF OBJECT_ID('TEMPDB..##MyGlobalTempTable') IS NOT NULL DROP TABLE ##MyGlobalTempTable; -- 创建一个新的全局临时表 CREATE TABLE ##MyGlobalTempTable ( ID INT PRIMARY KEY, Name NVARCHAR(50), CreatedAt DATETIME DEFAULT GETDATE() ); -- 向新建立的全局临时表插入一些测试数据 INSERT INTO ##MyGlobalTempTable (ID, Name) VALUES (1,'Alice'), (2,'Bob'); SELECT * FROM ##MyGlobalTempTable; ``` 这段代码首先确保不会因重复命名而导致错误发生,接着构建了一个新的全局临时表来保存两个字段的数据条目最后查询显示所插入的内容。 #### 关于临时表的删除时间和生命周期 对于由应用程序或用户发起的操作来说,通常情况下无需特别关注何时应该销毁这些临时结构,因为在大多数情形下,SQL Server 已经设计好了合理的机制来进行自动化回收工作。具体表现为: - 对于本地临时表而言,只要触发了会话断开事件(如客户端程序正常退出),那么所有隶属于这个特定上下文环境下的资源都会随之消失不见,包括但不限于之前提到过的那些只存在于单一连接期间的对象实体; - 至于全局性的同类项目,则要等到没有任何活动链接继续依赖着它们之时方才彻底释放掉占用的空间位置。不过值得注意的是,如果希望提前完成这项任务的话也是可行的—只需通过标准 DDL 语句 (`DROP TABLE`) 明确指出目标即可实现即时清理的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值