视图与表有很多相似的地方,视图也是由若干个字段以及若干条记录构成,视图也可以作为select语句的数据源。甚至在某些特定条件下,可以通过视图对表进行更新操作,如图7.1所示。

图7.1 视图与表的关系
视图中保存的仅仅是一条select语句,视图中的源数据都来自于数据库表,数据库表称为基本表或者基表,视图称为虚表。
1.视图的概念
视图与表(有时为了与视图区别,称表为基本表—— Base Table)不同,视图是一个虚表,即视图所对应的数据不进行实际存储,数据库中只存储视图的定义,对视图的数据进行操作时,系统根据视图的定义去操作与视图相关联的基本表。
视图一经定义,就可以像表一样被查询、修改、删除和更新。使用视图有下列优点:
(1)为用户集中数据,简化用户的数据查询和处理。有时用户所需要的数据分散在多个表中,定义视图可将它们集中在一起,从而方便用户的数据查询和处理。
(2)屏蔽数据库的复杂性。用户不必了解复杂的数据库中的表结构,并且数据库表的更改也不影响用户对数据库的使用。
(3)简化用户权限的管理。只需授予用户使用视图的权限,而不必指定用户只能使用表的特定列,增加了安全性。
(4)便于数据共享。各用户不必都定义和存储自己所需的数据,可共享数据库的数据,这样同样的数据只需存储一次。
(5)可以重新组织数据以便输出到其他应用程序中。
2.创建视图
视图在数据库中是作为一个对象来存储的。创建视图使用CREATE VIEW语句,基本的语法格式如下:
CREATE VIEW view_name [(column_list)]
AS select_statement
·view_name:视图名。
·column_list:为视图的列定义明确的名称,可使用可选的column_list子句,列出由逗号隔开的列名。column_list中的名称数目必须等于SELECT语句检索的列数。若使用与源表或视图中相同的列名时可以省略column_list。
·select_statement:用来创建视图的SELECT语句,可在SELECT语句中查询多个表或视图。
创建视图的语法格式简化如下:
create view 视图名 [(视图字段列表)]
as
select语句
查询视图的语法格式为:
Select* from视图名where条件
【例7.1】创建PXSCJ数据库上的CS_KC视图,包括计算机专业各学生的学号、其选修的课程号及成绩。

【例7.2】创建PXSCJ数据库上的计算机专业学生的平均成绩视图CS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。

视图定义后,就可以像查询基本表那样对视图进行查询。
【例7.3】在视图CS_KC中查找计算机专业的学生学号和选修的课程号。
SELECT 学号,课程号
FROM CS_KC;
【例7.4】查找平均成绩在80分以上的学生的学号和平均成绩。
本例首先创建学生平均成绩视图XS_KC_AVG,包括学号(在视图中列名为num)和平均成绩(在视图中列名为score_avg)。

查询结果如图7.2所示。

图7.2 视图查询
3.查看视图的定义
可以使用下面四种方法查看视图的定义。
(1)例如,在choose数据库中成功地创建了视图available_course_view后,该视图的定义默认保存在数据库目录(例如choose目录)下,文件名为available_course_view.frm。使用记事本打开该文件,即可查看该视图的定义。
(2)视图是一个虚表,也可以使用查看表结构的方式查看视图的定义。(https://www.xing528.com)
(3)MySQL命令“show tables;”命令不仅显示当前数据库中所有的基表,也会将所有的视图罗列出来。
(4)MySQL系统数据库information_schema的views表存储了所有视图的定义,使用下面的select语句查询该表的所有记录,也可以查看所有视图的详细信息。
select * from information_schema.views;
下面列出一些查看或修改视图信息的相关语句:
(1)查看视图名:
show tables;
(2)查看视图详细信息:
show table status[from 库名][LIKE "视图名"] \G
(3)查看视图定义信息:
show create view v_name;
(4)查看视图设计信息:
describe v_name;
(5)修改视图:
create or replace view v_name
as
select 子句;
或
alter view v_name
as
select 子句
4.视图的作用
(1)使操作变得简单。
(2)避免数据冗余。
(3)增强数据安全性。
(4)提高数据的逻辑独立性。
5.删除视图
如果某个视图不再使用,可以使用drop view语句将该视图删除,语法格式如下:
DROP VIEW [IF EXISTS] view_name [,view_name] ...
其中view_name是视图名,声明了IF EXISTS,若视图不存在的话,不会出现错误信息。使用DROP VIEW一次可删除多个视图。例如:
DROP VIEW CS_KC,XS_KC_AVG;
将删除视图CS_KC和XS_KC_AVG。
6.检查视图
视图分为普通视图与检查视图。通过检查视图更新基表数据时,只有满足检查条件的更新语句才能成功执行。创建检查视图的语法格式如下:
create view 视图名 [(视图字段列表)]
as
select语句
with [local | cascaded] check option
检查视图分为local检查视图与cascade检查视图。
with_check_option的值为1时表示local(local视图),值为2时表示cascade(级联视图,在视图的基础上再次创建另一个视图)。
local检查视图与cascade检查视图,如图7.3所示。

图7.3 local检查视图与cascade检查视图的区别
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
