zoukankan      html  css  js  c++  java
  • SqlServer和Oracle临时表生命周期

    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 ” 意思是提交当前事务时不删除临时表中的数据。

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

  • 相关阅读:
    .net Ioc 之 Unity 适合刚开始使用
    今天研究Unity Ioc 框架
    C#连接周立功CAN盒,调用ZCAN_OpenDevice函数时返回值一直是0失败。
    CAN通讯
    初学winform 自定义控件
    linq联表查询的时候报错
    dot net core 在IIS发布后,打开网页报错
    网卡驱动正常,网线也正常,但是网线插入电脑网口,网口指示灯就是不亮,网络适配器显示网线拔出
    flutter环境配置(windows)
    C#连接oracle数据库报错:OCIEnvCreate 失败,返回代码为 -1,但错误消息文本不可用
  • 原文地址:https://www.cnblogs.com/taofengfeng/p/10832816.html
Copyright © 2011-2022 走看看