数据库基础-视图

视图概念(concept)

视图是从一个或者多个表(称为基本表)导出的表,视图所对应的数据不进行实际储存,是一个虚标,即数据库中只储存视图的定义,在对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表;视图一经被定义,就可以像表一样被查询,修改,新增,删除

视图的优点

  1. 为用户集中数据,简化用户的数据查询和处理。有时,用户需要的数据分散在多个表中,定义视图可将他们集中在一起,从而方便用户进行数据查询和处理
  2. 屏蔽数据库的复杂性。用户不必了解复杂的数据库中的表结构,并且数据库表的更改也不影响用户对数据库的使用
  3. 简化用户权限的管理。只需授予用户使用视图的权限,而不必指定用户只能使用表的特定列,也增加了安全性
  4. 便于数据共享。各用户不必都定义和储存自己所需的数据,而可共享数据库的数据,这样同样的数据只需要储存一次
  5. 可以重新组织数据以便输出到其他应用程序中

使用创建视图时注意

  1. 只能在当前数据库中创建视图。视图的命名必须遵循标识命名规则,不能与表同名
  2. 不能把规则,默认值或者触发器与视图关联

使用命令创建视图

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
一个可更新视图可以是一下情形之一

  1. 创建视图的select语句没有聚合函数,且没有top,group,union字句以及distinct关键字
  2. 创建视图的select语句中不包含从基本表列通过计算所得的列
  3. 创建视图的select语句的from字句至少要包含一个基本表

注意:

  1. 当视图所依赖的基本表多个时,不能向该视图插入数据

修改视图的定义

修改视图定义可以通过“SSMS”,也可以使用T-SQL命令;

需要注意的是:对于加密储存的视图定义不能在“SSMS”,只能通过T-SQL语句

使用命令修改视图

alter view 视图名 [with <视图属性>]
	as select语句[;]
[with check option]

删除视图

drop view 视图名;

使用drop view可以删除一个或者多个视图,例如:

drop view name1,name2;
发布了21 篇原创文章 · 获赞 0 · 访问量 1793

猜你喜欢

转载自blog.csdn.net/qq_42418169/article/details/104862907
今日推荐