【阅读帮助:本文的各种括号中的内容为辅助理解信息,没有特别的含义。在第一遍阅读中,括号里面的内容,可以先忽略;有兴趣读多遍的时候,再细看各种括号里面的辅助信息。】
正文
在SQL Server数据库中,临时表是非常重要的。接下来,谈谈我的理解(对临时表的特点及使用)。
首先,虽然临时表存放在临时库(tempdb)中,但是它与永久表,还是很相似的。不同之处是,临时表会被自动删除(若不再被使用)。
其次,临时表有两大类型:本地临时表(表名的前缀只有一个#,仅供它所属的数据库<连接>使用)和全局表(表名的前缀是两个#,可供所有数据库<连接>使用)。
再次,为了保证本地临时表的独立性(在数据库连接上的独立性),SQL Server设立了特别的命名机制(在不同的连接<数据库连接>中,虽然本地表可能拥有相同的名称,但是这些本地表之间不会有任何关系)。
再再次,临时表的使用有以下三个好处(很明显的哦):节省表空间(数据库系统会自动维护数据库的临时表空间<临时表也只利用了这个空间哦>)、提高系统效率(临时表利用虚拟内存,硬盘的读写次数大大减少)、自动清空数据(在会话结束、事务完毕后,临时表会自动清空数据,不必主动删除数据)
本地临时表
特征:表名的前缀是一个#(是个数字符号哦)
可见度:仅(创建此临时表的)用户连接可见
清理:用户断开数据库连接(创建临时表的数据库连接)的时候,被自动删除。
本地临时表的创建语法:
CREATE TABLE #表名 (字段1 字段类型,字段2,字段类型…)
–如果要创建的临时表,不是当前数据库连接,则在上面的语句前面,增加语句(USE 数据库名2<目标数据库的实例名> GO)
–在说说查询语句(select * from #表名):如果创建之后,直接使用<不切换数据库连接>使用这个查询语句,则使用正常;如果切换了数据库连接,则会查无此表。
全局临时表
特征:表名的前缀是2个#(是个数字符号哦)
可见度:任何用户(数据库)连接,都可见
清理:引用该临时表的所有数据库连接,都断开之后,该临时表才被自动删除。
全局临时表的创建语法:
CREATE TABLE ##表名 (字段1 字段类型,字段2 字段类型…)
–如果要插入数据,可以直接插入以下语句
INSERT INTO VALUES(字段1的值,字段2的值…),(字段1的值,字段2的值…)…
–不论有没有切换数据库连接,都可以通过以下语句,来查看临时表的内容
select * from ##表名
–如果引用这个临时表的所有数据库连接,都关闭了,那么这个临时表会被SQL Server给释放掉,清理掉。被清理掉之后,该表就无法被其他数据库连接所使用了。再使用上述查询语句,就没有内容了。
批量插入数据
SELECT * INTO #表名 FROM 表名;
删除临时表
DROP TABLE #表名;