视图概念(concept)
视图是从一个或者多个表(称为基本表)导出的表,视图所对应的数据不进行实际储存,是一个虚标,即数据库中只储存视图的定义
,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表;视图一经被定义,就可以像表一样被查询,修改,新增,删除
视图的优点
- 为用户集中数据,简化用户的数据查询和处理。有时,用户需要的数据分散在多个表中,定义视图可将他们集中在一起,从而方便用户进行数据查询和处理
- 屏蔽数据库的复杂性。用户不必了解复杂的数据库中的表结构,并且数据库表的更改也不影响用户对数据库的使用
- 简化用户权限的管理。只需授予用户使用视图的权限,而不必指定用户只能使用表的特定列,也增加了安全性
- 便于数据共享。各用户不必都定义和储存自己所需的数据,而可共享数据库的数据,这样同样的数据只需要储存一次
- 可以重新组织数据以便输出到其他应用程序中
使用创建视图时注意
- 只能在当前数据库中创建视图。视图的命名必须遵循标识命名规则,不能与表同名
- 不能把规则,默认值或者触发器与视图关联
使用命令创建视图
T-SQL中用于创建视图的语句是create view语句,其格式为:
create view 视图名 [with<视图属性>[,...]]
as select 语句[;]
[with check option
]
说明
语句 | 说明 |
---|---|
架构名 | 数据库架构名 |
列名 | 视图中包含的列,可以有多个列名。若使用与源表或者视图相同的列名,则不必给出列名 |
with<视图属性> | 指出视图的属性 |
select语句 | 用来创建视图的语句,源表可以是基本表,也可以是视图。但有一下限制。限制1:定义视图的用户必须对所参照的表或者视图有查询即(select)的权限,限制2:不能使用order by字句,限制3:不能使用into语句,限制4:不能在临时表或者变量上创建视图 |
with check option | 指出在视图上所进行的修改都要符合select语句所指定的限制条件,这样可以确保数据修改后,仍然通过视图看到修改的数据 |
视图属性
具体格式如下:
<视图属性>::=
{
[encryption] /*在系统表syscomments中储存create view语句时进行加密*/
[schemabinding] /*将视图与其所依赖的表或者视图结构相关联*/
[view_metadata] /*当引用视图浏览模式的元数据时,向dblb,odbc,oledb api返回有关视图元信息*/
}
例1
创建ccj视图,包括计算机专业各学生的学号,其选修的课程好以及成绩。要保证视图的修改都符合专业为计算机的这个专业
T-SQL命令入选
create view ccj with encryption
as select xsb.学号,xsb.课程号,成绩
from xsb,cjb
where xsb.学号=cjb.学号 and 专业 = '计算机'
例2
创建计算机专业学生的平均成绩视图ccj_avg,包括学号(在视图列名为num)和平均成绩(在视图中列名为score_avg)
T-SQL命令如下
create view ccj_avg(num,score_avg)
as select xsb.学号,avg(成绩)
from ccj
group by 学号
更新视图
通过更新视图(包括插入,修改和删除)数据可以修改基本表数据。但并不是所有的视图都可以更新,只能对满足可更新条件的视图进入更新
1.可更新视图
要通过视图更新基本表数据,必须保证视图是可更新视图。更新操作包括insert,update,delete
一个可更新视图可以是一下情形之一
- 创建视图的select语句没有聚合函数,且没有top,group,union字句以及distinct关键字
- 创建视图的select语句中不包含从基本表列通过计算所得的列
- 创建视图的select语句的from字句至少要包含一个基本表
注意:
- 当视图所依赖的基本表多个时,不能向该视图插入数据
修改视图的定义
修改视图定义可以通过“SSMS”,也可以使用T-SQL命令;
需要注意的是:对于加密储存的视图定义不能在“SSMS”,只能通过T-SQL语句
使用命令修改视图
alter view 视图名 [with <视图属性>]
as select语句[;]
[with check option]
删除视图
drop view 视图名;
使用drop view可以删除一个或者多个视图,例如:
drop view name1,name2;