数据库中的视图是一个虚拟表。同真实的表同样,视图包含一系列带有名称的列和行数据,行和列数据用来自由定义视图和查询所引用的表,而且在引用视图时动态产生。本篇将经过一些实例来介绍视图的概念,视图的做用,建立视图,查看视图,修改视图,更新和删除视图等SQL Server的数据库知识。数据库
视图是从一个或者多个表导出的,它的行为与表很是类似,但视图是一个虚拟表,在视图中能够使用SELECT语句查询数据,以及使用insert、update和delete语句修改记录,对于视图的操做最终转化为对基本数据表的操做。视图不只能够方便操做,并且能够保障数据库系统的安全性。安全
视图一经定义便存储在数据库中,与其相对应的数据并无像表数据那样在数据库中在存储一份,经过视图看到的数据只是存放在基本表中的数据。能够对其进行增删该查,经过视图对数据修改,基本表数据也对应变化,反之亦然。服务器
SQL Server的视图能够分为3类,分别是:标准视图,索引视图,分区视图ide
2.1.标准视图函数
标准视图组合了一个或多个表中的数据,能够得到使用视图中的大多数好处,包括重点将放在特定的数据上及简化数据操做。性能
2.2.索引视图测试
索引视图是被具体化了的视图,即它已经通过计算并存储。能够为视图建立索引,对视图建立一个惟一的汇集索引。索引视图能够显著提升某些类型查询的性能,索引视图尤为适于聚合许多行的查询,但它们不太适于常常更新的基本数据集。加密
2.3.分区视图spa
分区视图在一台多多台服务器间水平链接一组成员表的分区数据,这样,数据看上去如同来自一个表。链接本地同一个SQL Server实例中的成员表的视图是一个本地区分视图。
与直接从表中读取数据相比,视图具备一下优势
3.1.简单化
看到的就是须要的,视图不只能够简化用户对数据的理解,也能够简化对它们的操做,那些常常使用的查询能够被定义为视图,从而使得用户没必要为之后的每次操做指定所有的条件。
3.2.安全性
视图能够做为一种安全机制。经过视图用户只能查看和修改他们所能看到的数据。其它或表既不可见也不能够访问。若是某一用户想要访问视图的,必须授予其访问权限。视图所引用表的访问权限与视图权限的设置互不影响。
3.3.逻辑数据独立性
视图能够帮助用户屏蔽真实表结构变化带来的影响。
4.1.建立视图
--语法 CREATE VIEW view_name AS SELECT column_name(s) FROM table_name WHERE condition
测试数据准备:
use sample_db; create table studentTable( id int identity(1,1)primary key, name varchar(20), gender char(2), age int, ) insert into studentTable (name,gender,age) values ('刘备','男',28), ('张飞','男',24), ('关羽','男',26);
--建立视图 if (exists (select * from sys.objects where name = 'student_view')) drop view student_view go --student_view()不实用参数,默认为基础表中的列名称 create view student_view as select name,age from studentTable where age>24; --执行视图 select * from student_view;
查看视图的信息
exec sp_help 'student_view'; exec sp_helptext 'student_view';
建立加密视图:
--加密视图 if (exists (select * from sys.objects where name = 'student_encryption')) drop view student_encryption go create view student_encryption with encryption --加密 as select id, name, age from studentTable go --view_definition is null --查看加密视图 select * from information_schema.views where table_name like 'student_encryption';
从执行结果可看出view_definition字段为 NULL
4.2.使用视图修改基本表数据
(1).经过视图向基本表中插入数据
--(1).经过视图向基本表中插入数据 create view stu_insert_view(编号,姓名,性别,年龄) as select id,name,gender,age from studentTable; go select * from studentTable; ---插入一条数据 insert into stu_insert_view values('曹操','男',40); ----查看插入记录以后表中的内容。 select * from studentTable;
(2).经过视图修改基本表的数据
--(2).经过视图修改基本表的数据 --查看修改以前的数据 select * from studentTable; --修改数据 update student_view set age=30 where name='刘备'; --查看修改后的数据 select * from studentTable;
(3).经过视图删除基本表的数据
--语法 delete view_name where condition; --例子 delete student_view where name ='张飞'; select * from student_view; select * from studentTable;
4.3.修该视图
--修改视图 alter view student_view as select * from studentTable where age>26;
4.4.删除视图
--语法 drop view view_name1,view_name2,......,view_nameN; --该语句能够同时删除多个视图,只要在删除各视图名称之间用逗号分隔便可。 drop view studentTable;