视图的作用
视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。但是视图并不在数据库中以存储数据值集的形式存在。行和列由定义视图查询所引用的表,并且在引用视图时动态生成。
视图是一种常用的数据库对象,可以把它看成从一个或几个表导出的虚拟表或者存储在数据库中的查询。对其引用的表来说,视图的作用类似于筛选。
数据库只存放视图的定义,不存放视图对应的数据。说白了就是存一段SELECT查询语句。
视图一经定义,就可以像基本表一样被查询,修改,删除。视图为查看和存储数据提供了另外的一种途径。对于查询完成的大多数操作,使用视图一样可以完成。视图还可以简化数据操作。通过视图修改数据,相应的基本表数据也会发生变化。同时,若基本表数据发生变化,这种变化也可以自动反应到视图中。
视图的类型
根据视图的工作机制的不同,通常将视图分为
- 标准视图
- 索引视图
- 分区视图
标准视图
标准视图是一种虚拟表,数据集没有物理存储,保存一段SELECT查询,就是视图的定义,基本表数据变了,标准视图也会跟着变,因为是查询的基本表数据,建立的目的是简化数据的操作。常用。
索引视图
索引视图是为了提高聚合多行数据的视图性能而建立的一种带有索引的视图类型。索引视图数据集被物理的存储在数据库中。该类视图建立的目的是提高检索的性能。对内容经常变更的基本表,不适合建立索引视图。
分区视图
分区视图是一种特殊的视图。也被称为分布式视图,其数据来自一台或者多台服务器中的分区数据。分区视图屏蔽了不同物理数据源的差异性,使得视图中的数据仿佛来自同一个数据表。当分区视图的分区数据来自同一台服务器时,分区视图就成了本地分区视图。
创建视图
视图在数据库中是作为一个对象来存储的。
不能再视图上创建全文索引,不能再规则,默认值,触发器的定义中引用视图。
CREATE VIEW <视图名>[<列名>[,...]]
[WITH ENCRYPTION]
AS
<定义视图的SELECT语句>
[WITH CHECK OPTION]
WITH ENCRYPTION:对创建视图语句的定义文本进行加密 WITH CHECK OPTION:强制针对视图执行的所有数据修改语句都必须符合在<定义视图的SELECT语句>中设置的条件。
未定义列名,则视图列将获得与SELECT语句中的列相同的名称。同名列,无名列必须为列定义名称。
对于定义视图的SELECT语句中有如下限制
- 定义视图的SELECT语句中不允许包含ORDER BY,COMPUTE BY,INTO,OPTION子句。
- 不能再临时表或者表变量上定义视图
查看视图信息
查看视图的基本信息
可以用存储过程sp_help查看视图的名称,所有者,创建时间,列信息等。
[EXECUTE|EXEC] sp_help <视图名>
查看视图的定义信息
如果视图创建时没有加密,可以查看创建的定义信息。
[EXECUTE|EXEC] sp_helptext <视图名>
查看视图与其他对象之间的依赖关系
比如查看视图饮用了那鞋表中的哪些字段
[EXECUTE|EXEC] sp_depends <视图名>
修改视图
和创建视图的参数一样
ALTER VIEW <视图名>[<列名>[,...]]
[WITH ENCRYPTION]
AS
<定义视图的SELECT语句>
[WITH CHECK OPTION]
使用视图
利用视图查询数据
利用视图更新数据
插入,修改,删除的语法和数据表一样的。
更新视图,数据库会自动将这些操作转换成对基本表的相应操作,并不是所有的视图都可以更新的。只有可更新的视图才能间接的修改基本表数据。
可更新的视图通常包括以下情况:
①满足以下条件的标准视图
- 导出的视图的数据源至少包含一个基本表,即创建视图语句的FROM子句中至少要有一个基本表名。
- 创建视图所用的SELECT语句中没有TOP,GROUP BY,UNION,DISTINCT
- 视图数据列不包含聚合函数
②通过INSTEAD OF触发器创建的可更新视图
③可更新的分区视图
可以对两个或多个基本表或视图的视图进行修改,但是每次修改只能影响一个基本表。
删除视图
DROP VIEW <视图名>[,...n]