美文网首页
本地临时表和全局临时表

本地临时表和全局临时表

作者: everfight | 来源:发表于2016-09-11 17:33 被阅读554次

数据库中有一个比较重要的概念:本地临时表和全局临时表。其中的细节前段时间做了些研究,这里记录下来,以后后面查询和学习。

Stackoverflow: Local and global temporary tables in SQL Server

There are two types of temporary tables: local and global. Local temporary tables are visible only to their creators during the same connection to an instance of SQL Server as when the tables were first created or referenced. Local temporary tables are deleted after the user disconnects from the instance of SQL Server. Global temporary tables are visible to any user and any connection after they are created, and are deleted when all users that are referencing the table disconnect from the instance of SQL Server.

样例:
1、失败的

declare @sql varchar(100)
set @sql='select id as a,name as b into #b from shopName'
print @sql
exec(@sql)
select * from #b
drop table #b

消息 208,级别 16,状态 0,第 5 行对象名 '#b' 无效。

2、成功的

declare @sql varchar(100)
set @sql='select id as a,name as b into ##b from shopName'
print @sql
exec(@sql)
select * from ##b
drop table ##b  //一定要DROP不然又要报错

以一个实际的例子来谈谈普通表、本地临时表、全局临时表三个表的差异。

如现在有一个保存员工信息的表user。这个表是一个普通表,只要其建立就不会自动删除,任何好在数据库中有使用这个表(具有访问权限)的用户都可以访问这个表,除非这个表被所有者删除或者更改了权限。

在用户A(具有访问权限)访问这个表的过程中,数据库可能会根据需要生成一张本地临时表#user。此时只有这个会话才可以访问这个本地临时表。当这个用户的会话中断之后,这个本地临时表也会被自动删除。

不过根据需要,数据库也可能会建立全局临时表##user(在名字上与本地临时表不同)。此时数据库中的任何用户只要连接到了数据库就可以访问这个全局临时表(访问权限上的不同)。当这个创建临时表会话的用户中断数据库连接时,这个临时表是否会删除是一个未知数,这要看当时的实际情况(在可用性上不同)。如果此时还有其他用户连接在这个表上的话,那么这个全局临时表就不会被删除。只有在中断连接时,没有其他用户在访问这个表时,即某个用户(不一定是创建这张全局临时表的用户)断开连接并且所有其他的会话不再使用这个表时才会被删除。

可见无论是全局临时表还是本地临时表,其跟普通表相比,最重要的一个差异就是其会根据需要自动创建。当不再需要时其又会自动删除。这也正是临时表的魅力所在,其可以在数据处理的过程中,减少很多中间表格。

相关文章

  • 本地临时表和全局临时表

    数据库中有一个比较重要的概念:本地临时表和全局临时表。其中的细节前段时间做了些研究,这里记录下来,以后后面查询和学...

  • SQL server 中表名前面的井号(#)

    表名前加#表示这是一个临时表 例如在存储过程中声明一个临时表 或者 这二种都是创建临时表 本地临时表VS全局临时表...

  • 【20002】Sql Server 常用语法、常用语句

    性能检测语句 临时表 临时表在SysObjects表里是找不到的 本地临时表创建临时表和创建普通表一样,只需要给名...

  • mysql 参数调优(10)之 tmp_table_size

    外部临时表和内部临时表外部临时表是通过语句create temporary table...创建的临时表,临时表只...

  • sql数据库管理

    分析,可以检索错误,然后没有bug,在点击执行 临时表 就是临时创建的表,存在缓存去,不能永久保存。本地临时表以#...

  • 【SQL】| Session、Transaction

    基于上次临时表的问题,我们提到了外部临时表的两种,基于session的临时表和基于transaction的临时表,...

  • 表变量和临时表

    表变量: DECLARE @tb table(id int identity(1,1), name ...

  • 临时表!!!

    1 临时表只作用于一个session中! 临时表只作用于一个session中! 临时表只作用于一个session中...

  • 临时表

    临时表记录属于1个用户,USRNAM字段 将获取到的数据缓存到 当前用户的临时表中 离开临时表界面时对当前用户的临...

  • 临时表

    CREATE GLOBAL TEMPORARY TABLE SCOTT.test(name VARCHAR2(1...

网友评论

      本文标题:本地临时表和全局临时表

      本文链接:https://www.haomeiwen.com/subject/clydettx.html