一、视图
1.1 概述
视图是从一个或者多个表中导出的,视图的行为与表非常相似,但视图是一个虚拟表。在视 图中用户可以使用SELECT语句查询数据,以及使用INSERT, UPDATE和DELETE修改记录。 从MySQL5.0开始可以使用视图,视图可以使用户操作方便,而且可以保障数据库系统的安全。
视图是一个虚拟表,是从数据库中一个或多个表中导出来的表。视图还可以从已经存在的视 图的基础上定义。
视图一经定义便存储在数据库中,与其相对应的数据并没有像表那样在数据库中再存储一份, 通过视图看到的数据只是存放在基本表中的数据。对视图的操作与对表的操作一样,可以对其进行 查洵、修改和删除。当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化; 同时,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。
1.2 视图的作用
与直接从数据表中读取相比,视图有以下优点:
1.简单化
看到的就是需要的。视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
2.安全性
通过视图用户只能査询和修改他们所能见到的数据。数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:
(1) 使用权限可被限制在基表的行的子集上。
(2) 使用权限可被限制在基表的列的子集上。
(3) 使用权限可被限制在基表的行和列的子集上。
(4) 使用权限可被限制在多个基表的连接所限定的行上。
(5) 使用权限可被限制在基表中的数据的统计汇总上。
(6) 使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。
3.逻辑数据独立性
视图可帮助用户屏蔽真实表结构变化带来的影响。
二、创建视图
视图中包含了 SELECT査询的结果,因此视图的创建基于SELECT语句和己存在的数据表, 视图可以建立在一张表上,也可以建立在多张表上。本节主要介绍创建视图的方法。
2.1 语法
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE)]
VIEW view_name [(column_list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
CREATE
表示创建新的视图;REPLACE
表示替换已经创建的视图;ALGORITHM
表示视图选择的算法:view name为视图的名称,columnjist为属性列;SELECT_statement
表示 SELECT语句;WITH [CASCADED | LOCAL] CHECK OPTION
参数表示视图在更新时保证在视图的权限范围之内。ALGORITHM
的取值有 3 个,分别是 UNDEFINED | MERGE | TEMPTABLE,
UNDEFINED 表示MySQL将自动选择算法;
MERGE 表示将使用的视图语句与视图定义合并起来,使得视图定 义的某一部分取代语句对应的部分;
TEMPTABLE 表示将视图的结果存入临时表,然后用临时表 来执行语句。CASCADED与LOCAL
为可选参数,
CASCADED 为默认值,表示更新视图时要满足所有相 关视图和表的条件;
LOCAL 表示更新视图时满足该视图本身定义的条件即可。
该语句要求具有针对视图的CREATE VIEW权限,以及针对由SELECT语句选择的每一列上的某些权限。对于在SELECT语句中其他地方使用的列,必须具有SELECT权限。如果还有OR REPLACE子句,必须在视图上具有DROP权限。
视图属于数据库。在默认情况下,将在当前数据库创建新视图。要想在给定数据库中明确创建视图,创建时应将名称指定为db_name.view_name。
2.2 在单表上创建视图
CREATE VIEW view_t AS SELECT quantity, price, quantity*price FROM t;
CREATE VIEW view_t(q,p,qp) AS SELECT quantity, price, quantity*price FROM t;
2.3 在多表上创建视图
CREATE VIEW stu_glass (id,name. glass) AS
SELECT student.s_id,student.name,stu_infb.glass
FROM student,stujnfb WHERE student.s_id=stu_infb.s_id;
三、查看视图
3.1 DESCRBE语句查看视图基本信息
DESCRIBE view_name;
3.2 SHOW TABLE STATUS语句查看视图基本信息
SHOW TABLE STATUS LIKE '视图名';
3.3 SHOW CREATE VIEW语句查看视图详细信息
SHOW CREATE VIEW '视图名';
3.4 在views表中查看视图详细信息
SELECT * FROM information_schema.views;
四、修改视图
4.1 CREATE OR REPLACE VIEW 语句修改视图
4.1.1 语法
CREATE [OR REPLACE] [ALGORITHM = (UNDEFINED | MERGE | TEMPTABLE)]
VIEW view name [(column list)]
AS SELECT_statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
4.1.2 示列
如果视图不存在则创建新视图,如果存在就修改。
CREATE OR REPLACE VIEW view_t AS SELECT * FROM t;
4.2 ALTER语句修改视图
4.2.1 语法
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
4.2.2 示列
ALTER VIEW viewjAS SELECT quantity FROM t;
五、更新视图
更新视图是指通过视图来插入、更新、删除表中的数据,因为视图是一个虚拟表,其中没有数据。通过视图更新的时候都是转到基本表上进行更新的,如果对视图增加或者删除记录,实际上是对其基本表増加或者删除记录。
5.1 使用UPDATE语句更新视图view_t
-- 在对视图做修改时基本表中的数据也会更新
UPDATE view_t SET quantity=5;
5.2 使用INSERT语句在基本表t中插入一条记录
INSERT INTO t(id, pid) VALUES(3,5);
5.3 使用DELETE语句在删除视图view_t2中的一条记录
DELETE FROM view_t2 WHERE price=5;
六、删除视图
6.1 语法
DROP VIEW [IF EXISTS]
view_name [, view_name]
[RESTRICT | CASCADE]
view_name
是要删除的视图名称,可以添加多个需要删除的视图名称,各个名称之间使 用逗号分隔开。删除视图必须拥有DROP权限。
6.2 示列
DROP VIEW IF EXISTS stu_glass;
七、视图与表的区别与联系
1.两者的区别:
(1) 视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化的表,而表不是。
(2) 视图没有实际的物理记录,而基本表有。
(3) 表是内容,视图是窗口。
(4) 表占用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进 行修改,但视图只能用创建的语句来修改。
(5) 视图是查看数据表的-种方法,可以査询数据表中某些字段构成的数据,只是一些SQL 语句的集合。从安全的角度来说,视图可以防止用户接触数据表,因而用户不知道表结构。
(6) 表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
(7) 视图的建立和删除只影响视图本身,不影响对应的基本表。
2.两者的联系:
视图(view)是在基本表之上建立的表,它的结构(即所定义的列)和内容(即所有记录) 都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。 视图是基本表的抽象和在逻辑意义上建立的新关系。