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

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

  • 相关阅读:
    python的sorted相关
    dict两种遍历方法
    python 深拷贝和浅拷贝浅析
    牛人总结python中string模块各属性以及函数的用法,果断转了,好东西
    Python二分查找
    堆和栈区别
    一次完整的HTTP事务是怎样一个过程?(转)
    ------shell学习
    BZOJ1025 [SCOI2009]游戏
    BZOJ1024 [SCOI2009]生日快乐
  • 原文地址:https://www.cnblogs.com/taofengfeng/p/10832816.html
Copyright © 2011-2022 走看看