视图
视图是一种虚拟的数据表(Virtual table),来源于数据表和其他数据
一、视图概述
1、视图的定义
视图不是真实的表,它是创建于一个或多个表或者视图之上的虚拟表,只定义数据(也可理解为是SQL 语句筛选出来的表)
2、视图的分类
SQL Server 2012 中视图可分为三类
- 标准视图
在数据库中仅保存其定义
- 索引视图
不仅保存其定义,生成的记录也被保存,还可以创建唯一聚集索引。使用索引视图可以加快查询速度,提高视图性能
- 分区视图
将一个或多个数据库中的一组表中的记录抽取且合并,通过使用该视图,可以连接一台或多台服务器成员表中的分区数据,使得这些数据看起来就像来自同一个表。该视图的作用:将大量的记录按地域分开储存使得数据安全和处理性能得到提高。
3、视图的优缺
视图是一种虚表,是从一个或几个基本表(或视图)导出的表;视图只存放视图的定义,不会出现是数据冗余;基表数据发生变化,从视图中查询出的数据也会随之改变。
4. 优点
5. 逻辑数据独立性
6. 简化数据查询
7. 提高安全性
8. 缺点
9. 更多的操作限制。限制在于:因为数据的完整性约束条件限制,视图在增加、修改、删除数据时,会产生更多限制
10. 执行效率差。视图是一个从数据表或其他视图映射出的虚拟表,只有在使用的时候才从数据表导出,执行效率相应比直接访问要差
二、创建视图
用户可以不必在SQL 窗格输入SQL 语句而直接在“条件”窗格中进行查询操作,用户可以不必了解Select 语句就可以实现较为复杂的查询操作
使用T-SQL 语句创建视图
CREATE VIEW <view_name> [(column_name)]
[WITH <ENCRYPTION|SCHEMABINDING|VIEW_METADATA>] AS select_statement
[WITH CHECK OPTION]
语法说明:
11. view_name 表示视图名
12. column_name 表示视图中各个列
13. ENCRYPTION 表示让SQL Server 加密视图的定义。使用该选项,任何用户,包括定义视图的用户都将看不见视图的定义
14. SCHEMABINDING 表示将视图与其依赖的表或视图结构相关联,使用该选项时必须包含所引用的表、视图或用户定义函数的两部分名称(所有者.对象)
注意:
当删除与视图相关联的基表或基视图时,除非该视图已被删除或更改,否则报错。另外,对参与具有关联视图的基表执行ALTER TABLE 语句,又会影响与关联视图的定义,语句运行失败。
15. VIEW_METADATA 表示指定为引用视图的查询请求浏览模式的元数据时SQL SERVER 将向DBLIB 、ODBC 、OLE DB API 返回有关视图的元数据信息,而不是返回基表或其他表
16.
17. select_statement 创建视图的SELECT 语句
18. WITH CHECK OPTION 表示强制视图上执行的所有数据修改语句必须符合SELECT 查询语句设置的准则。通过视图修改行时,WITH CHECK OPTION 可确保修改后,仍可通过视图看到修改的数据
创建视图注意的问题
- 命名符合标识符定义规范
- 不仅在表中可以创建视图,在引用视图的存储过程和视图基础上创建视图
-
不能在视图上定义全文索引
- 视图不能有DEFAULT 属性
- 视图上不能有AFTER 属性,但可以有INSTEAD OF 触发器
- 定义视图的查询语句不能有以下关键字ORDER BY、COMPUTE、COMPUTE BY 、INTO 子句
- 不能在临时表上创建视图,也不能创建临时视图
- 必须指定视图中每个列的名字的情况:视图中任意一列是来自于一个算数表达式、函数或常数
三、使用视图
视图虽然是一个虚拟表,但SQL SERVER 允许像使用基本表一样,使用视图插入、更新和删除记录。当然,视图所修改的数据实际上都是对基本表的数据所做的修改。使用视图修改记录需要注意一些限制条件:
- 不能同时修改基于多个表创建的视图。一条INSERT 语句只能向一个基本表中添加数据,使用UPDATE 更新的列必须同属于一个表,DELETE 同样不能
- 不能修改含有计算字段的视图,包括基于算术表达式或聚合函数的字段创建的视图。也就是说,如果创建视图时含有聚合函数、算术表达式、DISTINCT 、GROUP BY 、HAVING 子句,视图就只能查询,不能修改
- 没有基本表主键的视图不能插入记录,但可以执行UPDATE 和DELETE 操作。执行INSERT 命令时,视图必须包含基本表的主键,否则插入失败
- 视图中进行插入、更新、和删除操作仍然要遵守基本表的完整性约束条件