SqlServer视图

一:视图的概述数据库

 视图是从一个或者多个表导出的,它的行为与表很是类似,但视图是一个虚拟表,在视图中可使用SELECT语句查询数据,以及使用insert、update和delete语句修改记录,对于视图的操做最终转化为对基本数据表的操做。视图不只能够方便操做,并且能够保障数据库系统的安全性。安全

 视图一经定义便存储在数据库中,与其相对应的数据并无像表数据那样在数据库中在存储一份,经过视图看到的数据只是存放在基本表中的数据。能够对其进行增删该查,经过视图对数据修改,基本表数据也对应变化,反之亦然。服务器

 视图若是使用order by排序,必须搭配top或offset fetch使用,全部视图的列名称必须惟一。ide

二:视图的分类

 SQL Server的视图能够分为3类,分别是:标准视图,索引视图,分区视图。函数

2.1.标准视图性能

 标准视图组合了一个或多个表中的数据,能够得到使用视图中的大多数好处,包括重点将放在特定的数据上及简化数据操做。测试

2.2.索引视图fetch

 索引视图是被具体化了的视图,即它已经通过计算并存储。能够为视图建立索引,对视图建立一个惟一的汇集索引。索引视图能够显著提升某些类型查询的性能,索引视图尤为适于聚合许多行的查询,但它们不太适于常常更新的基本数据集。加密

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;

查看视图的信息

  • 使用sp_help存储过程查看视图的定义信息
  • 使用sp_helptext系统存储过程使用来显示规则,默认值,未加密的存储过程,用户定义函数,触发器或视图的文本,语法
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).向视图插入数据,基本表也会同步插入数据。

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).修改视图数据,基本表也会同步修改数据。

--查看修改以前的数据
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;

五:视图和表的区别

  1. 视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化表,而表不是;
  2. 视图(除过索引视图)没有实际的物理记录,而基本表有;
  3. 表是内容,视图是窗口;
  4. 表占物理空间,而视图不占物理空间,视图只是逻辑概念的存在;
  5. 视图是查看数据表的一种方法,能够查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全角度说,视图能够防止用户接触数据表,从而不知表结构;
  6. 表属于全局模式的表,是实表;视图数据局部模式的表,是虚表;
  7. 视图的创建和删除只影响视图自己,不影响对应的基本表。
相关文章
相关标签/搜索