数据库8——能简化操作的视图

文章目录

  • 视图
    • 视图的作用
    • 定义视图
    • 删除视图
    • 查询视图
    • 视图更新

视图

什么是视图呢?
首先,视图是一个虚表,所谓虚表,是从一个或几个基本表(或者视图)导出的表,它只存放视图的定义,而不存放视图对应的数据。当基表中的数据发生变化,从视图中查出的数据也随之改变。
也就是说,视图本质上是一个查询语句。数据库保存的不是查询的结果,而是查询本省。
基于视图的操作有四种:查询、删除、受限更新、定义基于视图的新视图。

视图的作用

  • 视图能简化用户的操作;
  • 视图使用户能以多种角度看待同一数据;
  • 视图对重构数据库提供了一种程度的逻辑独立性
  • 视图能够对机密数据提供安全保护;
  • 适当的利用视图可以更清晰的表达查询。

定义视图

语法格式为:

create view 视图名(列名,……)
as 子查询
with check option;

列名可以省略,表示全部选择。但是,有三种情况不能省略:

  • 子查询的某个目标列不是单纯的属性名,是集函数或表达式。
  • 多表连接是选出了几个同名列作为视图的字段
  • 需要在视图中为某个列启用新的更合适的名字。

with check option表示对视图进行update、insert、delete时要保证更新、插入或删除的行满足视图定义中的谓词条件(即子查询中的条件表达式)

注意:

  • 子查询不允许含有order by 子句和distinct短语。
  • RDBMS执行 create view语句时只是把视图定义存入数据字典,并不执行其中的select语句。
  • 在对视图查询时,按视图的定义从基本表中将数据查出。
/* 信息系学生视图 */
create view IS_Student1 as 
select Sno,Sname,Sage,Sdept from Student where Sdept = 'IS'
with check option;

/* 基于多个表的视图 */
create view IS_S1(Sno,Sname,Grade) as
select Student.Sno,Sname,Grade from Student,SC where
Sdept = 'IS' and Student.Sno = SC.Sno and SC.Cno = '1';

/* 基于视图的视图 */
create view IS_S2 as
select Sno,Sname,Grade from IS_S1 where Grade >= 90;

删除视图

语法格式:

drop view 视图名;
drop view 视图名 cascade;/* 如果该视图导出了其他视图,会一并删除 */

查询视图

查询视图和查询基本表的操作相同

但是DBMS执行的过程不同(视图消解),DBMS会首先进行有效性检查,检查查询的表、视图等是否存在,然后转换成等价的对基本表的查询,最后执行修正后的查询。

视图更新

视图更新操作包括插入(insert)、修改(update)和删除(delete)数据。语法格式和基本表的更新操作一样。

由于视图是一张虚表,所以对视图的更新,最终实际上是转换成基本表的更新,所以并不是所有的视图都是可以更新的。以下视图不能进行更新:

  • 从多个基本表通过连接操作导出的视图,不允许更新;
  • 对使用了分组、集函数操作的视图,不允许 进行更新操作;

你可能感兴趣的:(数据库学习,数据库,sql)