SQL_Server 视图操作总结

 

(1)视图概述

视图是一个虚拟表,其内容由查询定义。对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。分布式查询也可以定义使用多个异类源数据的视图。视图的结构和内容是通过SQL查询获得的,它也称为视图名,可以永久地保存在数据库中,视图在数据库内存储的是select语句,也即数据库内并没有存储视图这个表,而存储的是视图的定义。Select语句的结果集构成视图所返回的虚拟表。用户可以引用表时所使用的方法,在SQL语句中通过引用视图名称来使用虚拟表。使用视图可以实现下列任一或所有功能:

  1. 将用户限定在表中的特定行上。例如:只允许雇员看见工作跟踪表内记录其工作的行。
  2. 将用户限定在特定列上,例如,对于那些不负责任处理工资单的雇员,只允许其看见雇员表中的姓名列、办公室列、工作电话列和部门列,而不能看见任何包含工资信息或个人信息的列。
  3. 将多个表中的列连接起来,使它们看起来像一个表。
  4. 聚合信息而非提供详细信息。

 

(2)视图的类型

① 索引视图

索引视图是被具体化了的视图。这意味着已经对视图定义进行了计算并且生成的数据像表一样存储,用户可以为视图创建索引,即对视图创建一个唯一的聚集索引。索引视图可以显著提高某类查询的性能,尤其适于聚合许多行的查询,但不太适合经常更新的基本数据集。

 

② 分区视图

分区视图在一台或多台服务器间水平连接一组成员表中的分区数据,使数据看上去来自同一张表。连接同一个SQLSERVER2014实例中成员表的视图就是一个本地分区视图。

 

③ 系统视图

系统视图包含目录元数据,可以使用系统视图返回SQL Server实例或在该实例中定义的对象有关的信息。例如,可以查询sys.databases目录视图以便返回实例中提供的用户定义数据库有关的信息。

 

(3)视图的优缺点

优点:

    • 安全保密性。通过视图用户只能查询和修改他们所能见到的数据,数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定列上。通过视图,用户可以被限制在数据不同的子集上。
    • 查询简单性。视图能够从几个不同的关系表中提取数据,并且用一个表单表示出来,利用视图,将多表查询转换成视图的单表查询。
    • 结构简单性。视图能够给用户一个“个人化”的数据结构外观,用一组用户感兴趣的可见表来代表这个数据库的内容。
    • 隔离变化。视图能够代表一个个一致的、非变化的数据。即使是在作为视图基础的源表被分隔、重新构造或者重新命名的情况下,也是如此。
    • 数据完整性。如果数据被存取,并通过视图来输入,DBMS就能够自动地校验这个数据,以便却确保满足所规定的完整性约束。
    • 逻辑数据独立性。视图可以使应用程序和数据库表在一定程度上独立。如果没有视图,应用一定是建立在表上的。有了视图之后,程序可以建立在视图之上,从而程序与数据库被视图分隔开来。

 

缺点:

  • 性能。数据库管理系统必须把视图的查询转化成对基本表的查询,如果这个视图是由一个复杂的多表查询所定义,那么,即使是对视图的一个简单查询,数据库管理系统也会将其变成一个复杂的结合体,需要花费一定的时间。
  • 修改限制。当用户试图修改视图的某些记录行时,数据库管理系统必须将其转换为对基本表的某些行的修改。对于简单视图来说,这是很方便的,但是,对于复杂的视图,可能是不可修改的。

 

(4)视图的用途_创建视图

  1. 集中、简化和自定义每个用户对数据库的认识。
  2. 用作安全机制,方式是通过允许用户通过视图访问数据,而不授权用户直接访问底层基表的权限。
  3. 提供向后兼容接口来模拟架构已更改的表。

 

 

【视图属性参数解析】

  • 数据库:包含此视图的数据库的名称。
  • 服务器:当前服务器实例的名称。
  • 用户:此连接的当前用户名。
  • 创建日期:显示视图的创建日期。
  • 名称:当前视图的名称。
  • 架构:显示视图所属的架构。
  • 系统对象:指示视图是否为系统对象,值为true和false。
  • ANSI NULLs:指示创建对象时是否选择了“ANSI NULLs”选项。
  • 已加密:指示视图是否已加密,值为true和false。
  • 带引号的标识符:指示创建对象时是否选择了“带引号的标识符”选项。
  • 带架构已绑定:指示视图是否绑定到架构,值为true和false。

 

【视图属性窗体参数解析】

(名称):当前视图的名称

  1. 数据库名称:包含此视图的数据库的名称
  2. 说明:对当前视图的简短说明
  3. 架构:显示视图所属的架构
  4. 服务器名称:当前服务器实例的名称
  5. 绑定到架构:防止用户以会使用视图定义失效的任何方式修改影响此视图的基础对象。
  6. 是的确:显示是否可以明确地确定所选列的数据类型。
  7. 非重复值:指定查询将在视图中筛选出重复值。当只使用表中的部分列并且这些列可能包含重复值时,或者当联接两个或更多表的过程会在结果集中产生重复行时,此选项非常有用。选择该选项等效于向SQL窗格内的语句中插入关键字distinct。
  8. Group by 扩展:指定对于基于聚合查询的视图,附加选项可用。
  9. 输出所有列:显示所有列是否都由所选视图返回。这是在创建视图时设置的。
  10. SQL注释:显示SQL语句的说明。若要查看或编辑完整的说明,请单击相应的说明,再单击属性右侧的省略号(…)。注释可用包含视图使用者和使用时间等信息。
  11. Top规范:展开此项可显示Top、“百分比”、“表达式”和“等同值”属性的属性。
    • Top:指定视图将包括Top子句,该子句只返回结果集中的前N行或前百分之N行。默认情况下,视图将在结果集中返回前10行。使用此选项可更改返回的行数或指定不同的百分比。
    • 表达式:显示视图将返回的百分比(如果“百分比”设置为“是”)或记录(如果“百分比”设置为“否”)。
    • 百分比:指定查询将包含一个top子句,仅返回结果集中前百分之n行。
    • 等同值:指定视图将包括with ties子句。如果视图包含order by子句和基于百分比的top子句,with ties将非常有用。如果设置了该选项,并且百分比截止位置在一组行的中间,且这些行在order by子句中具有相同的值,则视图将会扩展,以包含所有这样的行。
    •   更新规范:展开此项可显示“使用视图规则更新”和“check选项”属性。

 

使用Create View语句创建视图

视图是建立在select查询结果和已存在的表中的,可以对一张表建立视图,也可以对多张表建立视图。

使用T-SQL命令创建视图的语法:

create view [schema_name.] view_name [column_list]

[with<ENCRYPTION|SCHEMABINDING|VIEW]METADATA>]

AS select_statement

[WITH CHECK OPTION]

参数解析:

  1. Schema_name:视图所属架构的名称
  2. View_name:指定创建视图的名称
  3. Column_list:指定视图中列名称
  4. AS:指定视图的操作
  5. Select_statement:指定视图所用的Select语句。该语句的操作对象可以是多个表和其他视图。
  6. WITH CHECK OPTION:视图中所有的数据修改语句都必须符合select_statement中设置的条件。

 

注意视图定义语句不能包含以下内容:

  • Compute或compte by语句
  • Order by语句
  • Into语句
  • Option语句
  • 引用临时变量或表

 

在单个表上创建视图

例子:在数据表xs上创建一个名为view_xs的视图。

 

多表上创建视图

例子:在xsxk数据库中添加视图view_score,要求显示表中的姓名,kc表中的课程名,xk表中的成绩。

(5)创建基于视图的视图

 

  1. 删除视图

当一个视图不再需要时,可以将其从数据库中删除,以回收其当前使用的磁盘空间。这样数据库中的任何对象都可以使用此回收空间。

  • 限制和局限:删除视图时,将从系统目录中删除视图的定义和有关视图的其他信息。还将删除视图的所有权限。使用drop table 删除的表上的任何视图都必须使用drop view显示删除。
  • 权限:需要有对schema的alter权限或对object的control权限。

  1. 对视图的数据进行增删改操作

 

  1. Alter View修改视图

使用Alter View语句可以对已创建好的视图进行修改,在使用Alter View语句修改视图前先要确定有使用该视图的权限。Alter View语法与Create View语法基本相同。

ALTER VIEW view_xs AS

ALTER VIEW view_info AS SELECT "姓名","家庭住址" FROM dbo.xs

  1. 向视图中添加数据

修改视图数据时需要注意以下几点:

  1. 修改视图数据时一次只能对一个表中的数据进行操作。
  2. 不能对表中的计算字段进行修改。

 

向视图中添加数据

例子:向view_info视图中添加一条数据,‘学号’为14001,‘姓名’为张三。

INSERT INTO view_info VALUES('14001','张三');

SELECT * FROM view_info

SELECT * FROM dbo.xs

 

修改视图中的数据

例子:通过view_info更新表中名为“张三”同学的学号。

UPDATE view_info

SET "学号"=15001 WHERE "姓名"='张三'

SELECT * FROM view_info

SELECT * FROM dbo.xs

删除视图中的数据

例子:要删除视图中学号为‘15001’学生的记录。

DELETE view_info WHERE "学号"=15001

SELECT * FROM view_info

SELECT * FROM dbo.xs

猜你喜欢

转载自blog.csdn.net/CQL_K21/article/details/89045019