9.6 视图管理
视图是一个虚拟表,是保存在数据库中的查询,其内容由查询定义。因此,视图不是真实存在的基础表,而是从一个或者多个表(或其他视图)中导出的虚拟的表。同真实的表一样,视图包含一系列带有名称的列和行数据,但视图中的行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。因此,视图所对应的数据并不实际地以视图结构存储在数据库中,而是存储在视图所引用的表中。
本节将介绍视图的基本概念,以及如何创建、修改和删除视图。
9.6.1 视图概述
视图看上去同表似乎一模一样,具有一组命名的字段和数据项,但它其实是一个虚拟的表,在物理上并不实际存在。视图是由查询数据库表产生的,它限制了用户能看到和修改的数据。
视图兼有表和查询的特点:与查询相似的是,视图可以用来从一个或多个相关联的表或视图中提取有用信息;与表相似的是,视图可以用来更新其中的信息,并将更新结果永久保存在磁盘上。
概括地说,视图具有以下特点。
• 视图可以使用户只关心他感兴趣的某些特定数据,不必要的数据可以不出现在视图中。例如,可以定义一个视图,只检索部门编号为2的员工数据,这样,部门编号为2的部门管理员就可以使用该视图,只操作其感兴趣的数据。
• 视图增强了数据的安全性。因为用户只能看到视图中所定义的数据,而不是基础表中的数据。
• 使用视图可以屏蔽数据的复杂性,用户不必了解数据库的全部结构,就可以方便地使用和管理他所感兴趣的那部分数据。
• 简化数据操作。视图可以简化用户操作数据的方式。可将经常使用的复杂条件查询定义为视图,这样,用户每次对特定的数据执行进一步操作时,不必指定所有条件和限定。例如,一个用于报表目的,并执行子查询、外联接及聚合以从一组表中检索数据的复合查询,就可以创建为一个视图。这样每次生成报表时无须编写或提交基础查询,而是查询视图。
• 视图可以让不同的用户以不同的方式看到不同或者相同的数据集。
例如,可以从员工表Employees中提取EmpName、Title和Salary组成一个员工简表视图。
9.6.2 创建视图
可以使用CREATE VIEW语句创建视图,其基本语法如下:
CREATE VIEW [OR REPLACE] 视图名
AS SELECT语句
如果使用OR REPLACE关键字,则当存在指定的视图时,将替换此视图的定义。
【例9-39】 从员工表Employees中提取EmpName、Salary、Title和表Departments中的部门名称表DepName组成一个视图EmpView1,代码如下:
CREATE VIEW EmpView1
AS
SELECT e.EmpName, e. Salary, e.Title, d.DepName
FROM Employees e INNER JOIN Departments d
ON e.DepId = d.DepId
执行此脚本,可以在数据库管理页面中查看到新创建的视图,如图9-50所示。
图9-50 在数据库管理页面中查看到新创建的视图
单击视图后面的“结构”超链接,打开查看视图结构页面,如图9-51所示。
图9-51 查看视图结构页面
9.6.3 修改视图
可以使用ALTER VIEW语句修改视图,其基本语法如下:
ALTER VIEW 视图名
AS SELECT语句
可以看到,ALTER VIEW语句的语法与CREATE VIEW语句相似。
【例9-40】 使用ALTER VIEW 命令修改视图EmpView1,在视图中删除工资项,具体代码如下:
ALTER VIEW EmpView1
AS
SELECT e.EmpName, e.Title, d.DepName
FROM Employees e INNER JOIN Departments d
ON e.DepId= d.DepId
运行此语句后,在视图结构管理页面中,可以查看到EmpView1视图已经删除了Salary字段,如图9-52所示。
图9-52 查看视图结构
9.6.4 删除视图
有相关权限的用户,可以将已经存在的视图删除。删除视图后,表和视图所基于的数据并不会受到影响。
在phpMyAdmin的数据库管理页面中,单击要删除的视图后面的“删除”超链接,在弹出对话框中单击“确定”按钮,即可删除指定的视图。
也可以使用DROP VIEW语句删除视图,其基本语法如下:
DROP VIEW 视图名
【例9-41】 删除视图EmpView1的语如下:
DROP VIEW EmpView1