8.1 视图概述
视图是从一个或者多个表中导出的,视图的行为与表非常相似,但视图是一个虚拟表。在视图中,用户可以使用SELECT语句查询数据,以及使用INSERT、UPDATE和DELETE语句修改记录。视图可以使用户操作方便,而且可以保障数据库系统的安全。
8.1.1 视图的含义
视图是一个虚拟数据表,是从数据库中一个或多个数据表中导出来的数据表。视图还可以从已经存在的视图的基础上定义。
视图一经定义便存储在数据库中,与其相对应的数据并没有像数据表那样在数据库中再存储一份,通过视图看到的数据只是存放在基表(Base Table)中的数据。对视图的操作与对表的操作一样,可以对其进行查询、修改和删除。当对通过视图看到的数据进行修改时,相应的基表的数据也要发生变化;同时,若基表的数据发生变化,则这种变化也可以自动地反映到视图中。
下面有一个student表和一个stu_info表,在student表中包含学生的id和姓名,在stu_info表中包含学生的id、班级和家庭住址,现在公布分班信息,只需要id、姓名和班级,这该如何解决?通过学习后面的内容就可以找到完美的解决方案。
数据表的设计如下:
CREATE TABLE student
(
s_id NUMBER(9),
name VARCHAR2(40)
);
CREATE TABLE stu_info
(
s_id NUMBER(9),
class VARCHAR2(40),
addr VARCHAR2(90)
);
通过DESC命令可以查看表的设计,可以获得字段、字段的定义、是否为主键、是否为空、默认值和扩展信息。
视图提供了一个很好的解决方法。创建一个视图,这些信息来自表的部分信息,其他的信息不取,这样既能满足要求,又不破坏表原来的结构。
8.1.2 视图的作用
与直接从数据表中读取相比,视图有以下优点:
1.简单化
看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
2.安全性
通过视图,用户只能查询和修改他们所能见到的数据,数据库中的其他数据既看不见又取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库实际的行和列上。通过视图,用户可以被限制在数据的不同子集上:
(1)使用权限可被限制在基表的行的子集上。
(2)使用权限可被限制在基表的列的子集上。
(3)使用权限可被限制在基表的行和列的子集上。
(4)使用权限可被限制在多个基表的连接所限定的行上。
(5)使用权限可被限制在基表中的数据的统计汇总上。
(6)使用权限可被限制在另一视图的一个子集上,或者一些视图和基表合并后的子集上。
3. 逻辑数据独立性
视图可帮助用户屏蔽真实表结构变化带来的影响。