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

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

  • 相关阅读:
    面试基础知识文档
    敏捷式开发
    redis总结
    自我介绍的问题
    面试2
    唐巧的iOS技术博客选摘
    IOS开发中滑动页面时NSTimer停止的问题
    iOS多线程GCD(转)
    iOS 用instancetype代替id作返回类型有什么好处?
    C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别 (转)
  • 原文地址:https://www.cnblogs.com/taofengfeng/p/10832816.html
Copyright © 2011-2022 走看看