一、视图概述
从一个或者多个表中导出的一个虚表。
1.1、视图的含义
视图是一个虚表,只保存sql逻辑,不保存查询结果,不保存是从数据库中一个或者多个表中导出来的表。还可以从已存在的视图的基础上定义。通过视图看到的数据只是存放在基本表中的数据,若基本表的数据发生变化,则这种变化也可以自动地反映到视图中。
1.2、视图的作用
-
简单化看到的就是需要的,可以对经常被使用的查询定义为视图,从而使得用户不必为以后的操作每次指定全部的条件。
-
安全性 通过视图用户只能查询和修改它们所能见到的数据。数据库中的其他数据则既看不见也取不到。数据库授权命令可以使每个用户对数据库的检索先知道特定的数据库对象上,但不能授权到数据库特定行和特定列上。
-
使用权限可被限制在基表的行、列的子集上。
-
使用权限可被限制在多个基表的连接所限定的行上
-
使用权限可被限制在基表中的数据的统计汇总上。
-
使用权限可被限制在另一个视图的子集上,或是一些视图和基表合并后的子集上。
-
-
逻辑数据独立性 视图可以帮助用户屏蔽真实表结构变化带来的影响。
二、创建视图
创建视图基于SELECT查询的结果
-- 创建视图的语法 CREATE [OR REPLACE] [ALGORITHM= {UNDEFINED |MERGE |TEMPTABLE}] VIEW view_name [(column_list)] AS SELECT_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
-
REPLACE:表示替换已创建的视图
-
ALGORITHM:表示视图选择的算法
-
UNDEFINED:表示MySQL将自动选择算法。
-
MERGE:表示将使用的视图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应部分
-
TEMPTABLE:表示将视图的结果存入临时表,然后用临时表来执行语句。
-
-
SELECT_statement:表示SELECT 语句
-
[WITH [CASCADED | LOCAL] CHECK OPTION]:表示视图在更新时保证在视图的权限范围之内。
-
CASCADED:为默认值,表示更新视图时要满足所有相关视图和表的条件
-
LOCAL表示更新视图时满足该视图本身定义的条件即可。
-
DESC view_name SHOW TABLE STATUS LIKE '视图名' SHOW CREATE VIEW view_name; SELECT * FROM informatiom_schema.views;
四、修改视图
视图的CRUD 和表基本一样
五、视图和表的区别和联系
区别:
-
视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化表,而表不是。
-
视图没有实际的物理记录,而表有。
-
表是内容,视图是窗口
-
表占用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以及时对它进行修改,但视图只能用创建的语句来修改
-
视图是查看数据表的一种方法,可以查询数据表中某一个字段构成的数据,只是一些SQL语句的集合。从安全角度来说,视图可以防止用户接触数据表,因而用户不知道表结构。
-
表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。
-
视图的建立和删除只影响试图本身,不影响对应的基本表。
联系:
-
视图是基本表之上建立的表,它的结构和内容都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。