视图
视图是从一个或者数个表中导出的数据的集合,数据库只存放视图的定义,而不存放视图对应的数据,这些数据依然在原来的表中。
1.定义视图
建立视图语句如下:
CREATE VIEW [(col name list)]
AS <子查询>
[WITH CHECK OPTION];
WITH CHECK OPTION表示对视图进行update\insert\delete的操作时要保证更新插入或者删除的行满足视图定义中的谓语条件。
举例,建立信息系学生的全部视图:
CREATE VIEW IS_Student
AS SELECT Sno, Sname, Sage FROM Student
WHERE Sdept=‘IS’
WITH CHECK OPTION
如果一个视图是从单个基本表导出的,并且只是去掉了基本表的某些行和列的,但是保留了主码的,则称这类视图为行列子集视图,上面的IS_Student就是行列子集视图
视图不仅可以建立在表上,也可以在几个视图上建立视图,或者在几个视图和表上建立新视图
可以使用带有聚集函数和GROUP BY的子句函数来查询定义视图,这种视图被称为分组视图
2.删除视图
DROP VIEW <视图名> [CASCADE]
3.查询视图
关系型数据库管理系统执行对视图的检查的时候,首先进行有效性检查,检查视图所涉及的表、视图是否存在。如果都存在,那么从数据字典中取出视图的定义,把定义中的视图和用户查询结合起来,然后转化为等价的对基本表的查询,然后执行该查询。这一转换过程称之为视图消解
比如建立信息系学生的全部视图:
CREATE VIEW IS_Student
AS SELECT Sno, Sname, Sage FROM Student
WHERE Sdept=‘IS’
WITH CHECK OPTION
然后对视图执行查询操作:查询信息系中年龄小于20的学生
SELECT Sno, Sage FROM IS_Student
WHERE Sage<20
系统执行视图消解后会将其转化为普通查询操作:
SELECT Sno,Sage FROM Student
WHERE Sage<20 AND Sdept=‘IS’
4.更新视图
更新视图是对视图进行CRUD,但是由于视图只是一张虚表,因此对视图的操作最终会转化为对基本表的操作。和查询视图一样,更新视图也是用视图消解转化为对基本表的更新的
更新视图的SQL语句实际上和对基本表CRUD差不多,只是将表名从基本表更换为视图
5.视图的作用
1.视图可以简化用户的操作
视图可以根据用户需求将若干张表组成虚表,用户直接查询视图便可得出所需数据,而不需要关注视图背后复杂的组成逻辑。相当于在数据库基本表之上再封装了一层。
2.视图对重构数据库起到了一定逻辑独立性
数据的逻辑独立性指的是,当数据库重构时,如果进行添加新表或者在原有表上添加新字段,用户的应用程序不会受到影响。而视图是对基本表的抽象,提供了一定的逻辑独立性
3.视图能够对机密数据提供安全措施
视图机制可以针对不同用户设计不同的视图,而不是让用户直接操作基本表。这使得一些机密的数据可以不展现给权限较低的用户