视图与暂时表
今天上午闲来无事,突然想写写视图与暂时表的作用,例如以下:
视图:
视图的定义:从一个或多个表(或视图)导出的表。
视图与表的不同之处:视图是一个虚表,即视图所相应的数据不进行实际存储。数据库仅仅存储视图的定义,对视图的数据进行操作时。系统依据视图的定义去操作与视图相关联的基本表。
上面小段事实上已经讲出了视图的本质特征。
视图主要用于系统的安全、查询和效率。在安全方面,举个样例:比如。你仅仅想让用户看到某一表的某几个字段,有些字段想不让用户看见,这是用视图解决会非常好,当然在select时也能够实现。
第在查询方面。对于比較复杂的查询,能够大大降低频繁编写sql语句的烦恼。同一时候,在效率上,数据分布在多台server上,视图一定会带来效率上的优点。
暂时表:
暂时表与永久表相似。但暂时表存储在 tempdb 中。当不再使用时会自己主动删除。
暂时表有两种类型:本地和全局。
它们在名称、可见性以及可用性上有差别。本地暂时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 SQL Server 实例断开连接时被删除。全局暂时表的名称以两个数字符号 (##) 打头,创建后对不论什么用户都是可见的。当全部引用该表的用户从 SQL Server 断开连接时被删除。
比如,假设创建了 employees 表,则不论什么在数据库中有使用该表的安全权限的用户都能够使用该表,除非已将其删除。假设数据库会话创建了本地暂时表 #employees。则仅会话能够使用该表,会话断开连接后就将该表删除。
假设创建了 ##employees 全局暂时表,则数据库中的不论什么用户均可使用该表。
假设该表在您创建后没有其它用户使用。则当您断开连接时该表删除。假设您创建该表后还有一个用户在使用该表,则 SQL Server 将在您断开连接而且全部其它会话不再使用该表时将其删除。
暂时表主要用来提高效率。
二者差别:
空间分配:物理空间的分配不一样。视图不分配空间。
虚实:视图是一条预编译的SQL语句。并不保存实际数据。而暂时表是保存在tempdb中的实际的表。即视图是一个快照,是一个虚表,而暂时表是客观存在的表类型对象。
它们的结构一个是表、一个快照。能够把视图想象成联合表的快捷方式。