精华内容
下载资源
问答
  • 数据库临时表的使用

    2019-04-26 14:47:00
    临时表与永久表相似,但临时表存储...只有创建本地临时表的数据库连接有表的访问权限,其它连接不能访问该表; 不同的数据库连接中,创建的本地临时表虽然“名字”相同,但是这些表之间相互并不存在任何关系;在SQ...

    临时表与永久表相似,但临时表存储在tempdb中,当不再使用时会自动删除。临时表有两种类型:本地和全局。它们在名称、可见性以及可用性上有区别。

    • 本地临时表就是用户在创建表的时候添加了“#”前缀的表,其特点是根据数据库连接独立。只有创建本地临时表的数据库连接有表的访问权限,其它连接不能访问该表;
    • 不同的数据库连接中,创建的本地临时表虽然“名字”相同,但是这些表之间相互并不存在任何关系;在SQLSERVER中,通过特别的命名机制保证本地临时表在数据库连接上的独立性。
    • 真正的临时表利用了数据库临时表空间,由数据库系统自动进行维护,因此节省了表空间。并且由于临时表空间一般利用虚拟内存,大大减少了硬盘的I/O次数,因此也提高了系统效率。
    • 临时表在事务完毕或会话完毕数据自动清空,不必记得用完后删除数据。

    全局临时表:创建时添加“##”

    数据库连接1创建全局临时表##Temp,##Temp被数据连接2使用排他锁使用

    (

    BEGIN TRAN
    select * from ##Temp with(xlock)

    ),当数据库连接1关闭时,临时表##Temp并没有随着数据库连接1的关闭而被释放掉,只要数据库连接2中启动的事务没有被回滚或提交,那么数据库连接2会一直持有临时表##Temp的排他锁,这时Sqlserver会认为还有数据库连接正在引用全局临时表##Temp,所以##Temp不会被释放掉。

    转载于:https://www.cnblogs.com/leonchan/p/10774217.html

    展开全文
  • 各种数据库临时表的使用区别总结

    万次阅读 2012-05-24 08:04:34
    虽然SQL92, 99, 2003, 2008标准...这里以几种主流数据库为例,分别介绍一下临时表的使用:1. PostgreSQL (以9.x为例)使用的是比较标准的语法: create [global | local] temp table t ( id int primary key) on commit

    虽然SQL92, 99, 2003, 2008标准都有推出,但并不是所有商家严格按照标准行事。痛苦的是使用和应用不同数据库的DBA和开发人员。
    这里以几种主流数据库为例,分别介绍一下临时表的使用:

    1. PostgreSQL (以9.x为例)

    使用的是比较标准的语法: 
    create [global | local] temp table t ( id int primary key) on commit delete | preserve rows
    其中,global和local是摆设,一样的效果。都是会话级别的。当前会话退出,表即删除。
    可以创建与当前模式相同的表名,即可以创建同名的表t,drop table t时,会先删除临时表。如下例所示:

    iihero=# create global temp table t(id int primary key) on commit delete rows;
    NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "t_pkey" for table "t"
    CREATE TABLE
    iihero=# insert into t values(1);
    INSERT 0 1
    iihero=# select * from t;
     id
    ----
    (0 rows)
    
    iihero=# begin;
    BEGIN
    iihero=# insert into t values(1);
    INSERT 0 1
    iihero=# select * from t;
     id
    ----
      1
    (1 row)
    
    
    
    
    iihero=# commit;
    COMMIT
    iihero=# select * from t;
     id
    ----
    (0 rows)
    

    2. DB2 9.x

    1). DB2的临时表需要用命令Declare Temporary Table来创建, 并且需要创建在用户临时表空间上;
    2). DB2在数据库创建时, 缺省并不创建用户临时表空间, 如果需要使用临时表, 则需要用户在创建临时表之前创建用户临时表空间;
    3). 临时表的模式为SESSION,SESSION即基于会话的,且在会话之间是隔离的。当会话结束时,临时表的数据被删除,临时表被隐式卸下。对临时表的定义不会在SYSCAT.TABLES中出现 .;
    4). 缺省情况下, 在Commit命令执行时, DB2临时表中的所有记录将被删除; 这可以通过创建临时表时指定不同的参数来控制;
    5). 运行ROLLBACK命令时, 用户临时表将被删除;
    下面是DB2临时表定义的一个示例:
    DECLARE GLOBAL TEMPORARY TABLE results
        (   
            RECID     VARCHAR(32)     ,    --id
            XXLY      VARCHAR(100),        --信息来源
            LXDH      VARCHAR(32 ),        --信息来源联系电话
            FKRQ      DATE           --反馈时间
        ) ON COMMIT PRESERVE ROWS WITH REPLACE NOT LOGGED;


    3. MySQL 5.X

    基本上就是会话级的,与PG类似,但没有PG语法完整。

    建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:
    CREATE TEMPORARY TABLE tmp_table (
    name VARCHAR(10) NOT NULL,
    value INTEGER NOT NULL
    )
    临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。当然你可以在仍然连接的时候删除表并释放空间。
    DROP TABLE tmp_table
    如果在你创建名为tmp_table临时表时名为tmp_table的表在数据库中已经存在,临时表将有必要屏蔽(隐藏)非临时表tmp_table。
    如果你声明临时表是一个HEAP表,MySQL也允许你指定在内存中创建它:
     CREATE TEMPORARY TABLE tmp_table (
    name VARCHAR(10) NOT NULL,
    value INTEGER NOT NULL
    ) TYPE = HEAP
    因为HEAP表存储在内存中,你对它运行的查询可能比磁盘上的临时表快些。然而,HEAP表与一般的表有些不同,且有自身的限制。

    4. Sybase ASE15.X

    基本上就是比较裸露的语法了:
    create table tempdb..t(id int primary key), 这个等价于global temp table t, server级的, 各连接都可以访问,需要显式的drop
    create table #t(id int primary key), 这个等价于local temp table t,  会话级的,连接断开时会自动删除

    5. MS SQL Server 200X
    与Sybase类似,但多出一个变种
    create table ##t(id int primary key), 这个等价于global temp table t, server级的, 各连接都可以访问,需要显式的drop
    create table #t(id int primary key), 这个等价于local temp table t,  会话级的,连接断开时会自动删除

    最后,Sybase ASE以及MS SQL Server使用中,需要注意会话的自动产生及断开
    比如一个变量:

    declare @vsql varchar(4096)
    set @vsql="select * into #t123 from emp"
    execute (@vsql)
    set @vsql="select top 3 * from #t123"
    execute (@vsql)
    当你执行这个段时,你会发现,最后提示#t123不存在,因为execute在执行完时,会话即退出。要想执行成功,有两种方法:
    1. 将两个sql合成一段来执行 : set @vsql = @vsql || "  select top 3 * from #t123"
    2. 使用global temp table, 即tempdb..t123或者SQLServer中的##t123

    临时表,在ASE, SQLServer中使用频率非常高,经常出现在存储过程当中。

    6. Oracle9.x and later
    语法与PG一样,还提供on commit preserve rows, 和on commit delete rows功能。
    但是只提供global功能,意即表本身不会自动删除。 只是提供是否保留数据的功能。这样,preserve rows相当于会话级,而on commit delete rows则相当于事务级的临时表了。用处还是蛮大的。
    缺点还有:
    1)不支持lob对象,这也许是设计者基于运行效率的考虑,但实际应用中确实需要此功能时就无法使用临时表了。
    2)不支持主外键关系

    总之,临时表的实现和使用,还真没有一个十全十美的商家。多留心一点就是了。


    展开全文
  • 什么是临时表,用户做一个操作查询出几百几千条数据,...临时表的 DML 操作产生较少的 REDO 日志; 临时表支持建索引,以提高查询性能; 在一个会话或事务结束后,数据将自动从临时表中删除; 不同用户可以访问相同...

    什么是临时表,用户做一个操作查询出几百几千条数据,我们可以把数据放在内存中。当有很多
    用户都这样做,内存空间不足,这个时候就需要把数据保存在磁盘上。

    DM 临时表支持以下功能:

    1. 在临时表中,会话可以像普通永久表一样更新、插入和删除数据;
    2. 临时表的 DML 操作产生较少的 REDO 日志;
    3. 临时表支持建索引,以提高查询性能;
    4. 在一个会话或事务结束后,数据将自动从临时表中删除;
    5. 不同用户可以访问相同的临时表,每个用户只能看到自己的数据;
    6. 临时表的数据量很少,意味着更高效的查询效率;
    7. 临时表的表结构在数据删除后仍然存在,便于以后的使用;
    8. 临时表的权限管理跟普通表一致。

    达梦数据库临时表有2种类型:

    on commit preserve rows --session 会话级临时表
    on commit delete rows --transaction 事务级临时表
    事务级临时表(整个事务结束后数据会清空)
    1、创建临时表,插入数据

    create global temporary table temp_transaction (id int,name varchar(20)) on commit delete rows;
    insert into temp_transaction values (1,'a');
    insert into temp_transaction values (2,'b');
    

    2、查询临时表

    select * from temp_transaction;
    

    在这里插入图片描述
    3、提交事务再查询

    commit;
    select * from temp_transaction;
    

    在这里插入图片描述
    会话级临时表(会话结束后数据会清空)
    1、创建临时表,并插入数据

    create global temporary table temp_session (id int,name varchar(20)) on commit preserve rows;
    insert into temp_session values (1,'a');
    insert into temp_session values (2,'b');
    

    2、提交事务并查询(发现数据还在)

    commit;
    select *from temp_session;
    

    在这里插入图片描述
    3、关闭当前会话,重新打开发现数据已情况。所以会话级临时表的数据只能当前会话可查看到,结束会话数据会清空。
    在这里插入图片描述

    展开全文
  • MS SQLSERVER,oracle 主流数据库临时表的使用
  • 数据库临时表

    2020-11-24 14:00:38
    今天在翻看别人代码时发现了临时表的使用,由于没有用过,特此学习,在此记录 1.定义 客户端新建了一个会话,这个会话只是服务器与客户端1对1的关系,客户端可能在服务端建立一个临时表,满足客户端处理某些事务的...

    0.前言

    今天在翻看别人代码时发现了临时表的使用,由于没有用过,特此学习,在此记录

    1.定义

    客户端新建了一个会话,这个会话只是服务器与客户端1对1的关系,客户端可能在服务端建立一个临时表,满足客户端处理某些事务的需求,当客户端退出会话后,这个临时表自动drop,没有任何数据信息占用数据库空间。

    2.优缺

    优点

    1. 省空间
      当客户端退出会话后,这个临时表自动drop,没有任何数据信息占用数据库空间
    2. 私密性
      客户端建立临时表只为特定的事务服务,这个表具有专用和私有性,不需要共享给其他人
    3. 高效率
      客户端建立的临时表具有单独操作和读写性能,因此速度上和处理效率上更高

    https://www.cnblogs.com/flzs/p/13246914.html

    缺点

    1.临时表相对而言表变量主要是多了I/O时间,但少了对内存资源的占用。数据量较大的时候,由于对内存资源的消耗较少,使用临时表比表变量有更好的性能。
    2.临时表只对创建会话可见,所以和线程池连接技术不能同时共用

    3.如何使用

    SQL Server

    创建有两种方式

    1. 直接使用create创建
      语法格式:
    create table #temporaryName (
    	...
    )
    
    1. 使用into创建
      语法格式:
    select * into #temporaryName from tableName;
    

    插入、查询

    1. 插入数据的时候和普通表是一样的插入方式
      insert into #temporaryName(...) values(...);
    2. 查询select * from #temporaryName;

    删除
    DEOP table #temporaryName;

    MySQL

    创建
    使用关键字temporary

    create temporary table temporaryName(
      id int primary key,
      name varchar(20) 
    )Engine=InnoDB default charset utf8
    

    临时表创建完成,用show tables 看不见
    为了避免删除相同表名的永久表,执行删除表结构的时候可以使用
    drop temporary table_name;

    展开全文
  • 1)会话级的临时表因为这这个临时表数据和你当前会话有关系,当你当前session不退出情况下,临时表数据就还存在,而当你退出当前session时候,临时表数据就全部没有了,当然这个时候你如果以另外...
  • Sybase临时表: 建表以前判断语句: if exists (select 1 from sysobjects where id = object_id('*******') and type = 'U') drop table ******** go ASE会话之间共享,数据和表结构一直存在于tempdb中...
  • 使用DB2的临时表时, 以下几点需要注意: 1. DB2的临时表需要用命令Declare Temporary Table来创建, 并且需要创建在用户临时表空间上;... 临时表的模式为SESSION; 4. 缺省情况下, 在Commit命令执行
  • 最近很多同学问到达梦数据库中如何在存储过程中创建临时表,这里给大家介绍一下: ...它是临时表的默认参数,表示临时表中的数据仅在事务过程(Transaction)中有效,当事务提交(COMMIT)后,临时表的暂时段.
  • HIVE 数据库临时表

    千次阅读 2019-07-26 11:18:10
    Hive从0.14.0开始提供创建临时表的功能,表只对当前session有效,session退出后,表自动删除。 语法: CREATE TEMPORARY TABLE ... 注意点: 1、如果创建的临时表表名已存在,那么当前session引用到该表名时实际用的...
  • 临时表(TEMPORARY TABLE)用来保存中间数据,通常是会话级或事务级,下面看一下国产数据库临时表上支持情况。 2 临时表定义 临时表仅存储了在事务或会话期间存在数据。临时表数据是会话私有数据,每...
  • 临时表:数据只在事务或者会话期间存在,保存临时用到数据。 分为两种: 一、会话指定的临时表(会话级别) 中断会话时,此临时表才会消失。 create globle temporary table_name( id int primary key, name ...
  • MS SQLSERVER SQL Server 支持临时表。临时表就是那些名称以井号 (#) 开头的... 临时表有两种类型: 本地临时表:本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 Microsoft SQL S
  • 1.会话级临时表: ...会话级临时表是指临时表数据只在会话生命周期之中存在,当用户退出会话结束时候,oracle自动清除临时表中数据。 格式如下: Create Global Temporary Table Table_Name (Col1 Typ...
  • oracle数据库临时表空间不断增长问题 问题描述 前几天在写一个服务时候遇到了这个问题,记录一下以后再遇到这个问题当成一种解决思路。在我启动服务接收数据以后,数据可以正常入库,但是我观察到数据库临时表...
  • 笔者在日常系统检查时,通过oracle Enterprise Manager Console检查数据库表空间使用情况,发现系统表空间使用率100% ,而且每个... 1、通过sql查看数据库临时表空间、用户对应临时表空间、系统默认临时表空间  s
  • 临时表空间是用来存放临时表使用的,如果系统有大量临时表数据建议把临时表空间扩大。 Oracle:可以创建多个临时表空间,支持手动创建临时表空间和扩展。 达梦:创建数据库的时候创建临时表空间。不能手动创建,但是...
  • 临时表 临时表与永久表相似,但临时表存储在 tempdb 中,当不再使用时会自动删除。 临时表有两种类型:本地和全局。...全局临时表的名称以两个数字符号 (##) 打头,创建后对任何用户都是可见的,当所有引用该...
  • 在oracle数据库使用临时表遇到一个问题,在程序中使用多个临时表的时候出现了一个问题: 全局临时表tmp1插入数据之后,然后通过for循环创建新的局部临时表tmp2,创建完tmp2之后再查询tmp1,发现tmp1中的数据都...
  • 一、创建临时表定义相关变量: CREATE TABLE #tempTable --创建临时表 ( MainTradeCode int, SubTradeCode int, SubTradeName varchar(50) ) DECLARE @keyword v

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,077
精华内容 1,630
关键字:

数据库临时表的使用