博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SqlServer和Oracle临时表生命周期
阅读量:6587 次
发布时间:2019-06-24

本文共 1203 字,大约阅读时间需要 4 分钟。

SqlServer:

局部临时表#temp_table:

只在当前会话结有效。会话终止则生存终止。

根据session不同开辟不一样的内存存放数据。

相同session的用户可以使用同一张临时表,只能create table 一次。

不同session建的临时表,即使表名相同,指向的内存也是不一样的,互相内容不可见。

 

全局临时表##temp_table:

顾名思义,不同的session可以使用同一块内存。但是其中的内容到底什么时候才被回收呢?

只要有任何session用到过这个表,且这些session没有被全部终止,就不被回收。

所谓session终止,我的理解,就sqlserver本身来说就是query窗体被关掉。如果是因为有应用程序连接而产生的session的话(以上所说的session都是sqlserver的session),web系就是session重启(IIS application pool重启,这里所说的session是http的session),应用系的话就是充启应用程序了(←猜想,没试过)。

 

Oracle:

ORACLE的临时表在应用系统中有很大的作用,它可以让用户只能够操作各自的数据中而互不干扰,不用担心会破坏或影响其他SESSION/TRANSACTION的数据,这也是数据安全的一种解决方法

临时表分为SESSION、TRANSACTION两种,SESSION级的临时表数据在整个SESSION都存在,直到结束此次SESSION;而TRANSACTION级的临时表数据在TRANACTION结束后消失,即COMMIT/ROLLBACK或结束SESSION都会清除TRANACTION临时表数据。

两种临时表的语法

create global temporary table 临时表名 on commit preserve|delete rows 
用preserve时就是SESSION级的临时表,用delete就是TRANSACTION级的临时表

CREATE GLOBAL TEMPORARY TABLE GT_ONE (

SN NUMBER,
QTY NUMBER
) ON COMMIT DELETE ROWS;

“ON COMMIT DELETE ROWS ” 意思是提交当前事务时删除临时表中的数据。

CREATE GLOBAL TEMPORARY TABLE GT_ONE (

SN NUMBER,
QTY NUMBER
) ON COMMIT PRESERVE ROWS;

“ON COMMIT DELETE ROWS ” 意思是提交当前事务时不删除临时表中的数据。

不论哪种形式,结束会话时都会删除临时表中的数据,在不同的会话中互不影响。

转载于:https://www.cnblogs.com/taofengfeng/p/10832816.html

你可能感兴趣的文章
怎样面试程序猿
查看>>
Redhat6.5安装DB2 Express-C版本
查看>>
php的http数据传输get/post...
查看>>
【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径
查看>>
checkbox的name与JavaBean的交互时发现的一个现象
查看>>
基于Token的身份验证——JWT(转)
查看>>
Maven(五)之Maven配置阿里云镜像飞快下jar包
查看>>
Mysql加锁过程详解(5)-innodb 多版本并发控制原理详解
查看>>
script 里写 html 模版
查看>>
vue2.0 + vux (三)MySettings 页
查看>>
ASP.NET Core 使用 Alipay.AopSdk.Core 常见问题解答
查看>>
spring @Value 设置默认值
查看>>
带你从零学ReactNative开发跨平台App开发(十一)
查看>>
java 生成zip文件并导出
查看>>
atitit.userService 用户系统设计 v4 q316 .doc
查看>>
1224 - 搞定 iText 识别文字后翻译
查看>>
《iOS 8开发指南(第2版)》——第6章,第6.3节在Xcode中实现MVC
查看>>
机器人快速崛起:5年内消失510万工作岗位
查看>>
内存泄漏和内存溢出的区别
查看>>
pageinspect分析btree索引结构
查看>>