概述
视图是从一个或多个表中的导出的,视图的行为与表非常相似,但视图是一个虚拟表。在视图中用户可以使用SELECT语句查询数据,以及使用INSERT、UPDATE和DELETE修改记录。
视图是一个虚拟表,是从数据库中一个或多个表中导出来的表。视图还可以从已经存在的视图的基础上定义。
当对通过视图看到的数据进行修改时,相应的基本表的数据也要发生变化;同时,若基本表的数据发生变化,这种变化也可以自动地反映到视图中。
视图的作用
简单化
视图不仅可以简化用户对数据的理解,也可以简化他们的操作。
安全性
通过视图,用户可以被限制在数据的不同子集上:
- 使用权限可被限制在基表的行的子集上。
- 使用权限可被限制在基表的列的子集上。
- 使用权限可被限制在基表的行和列的子集上。
- 使用权限可被限制在多个基表的连接所限定的行上。
- 使用权限可被限制在基表中的数据的统计汇总上。
- 使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。
逻辑数据独立性
视图可帮助用户屏蔽真实表结构变化带来的影响。
创建视图
创建试图使用CREATE VIEW语句,基本语法格式如下:
CREATE [OR REPLACE][ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE}]
VIEW view_name [(column_list)]
AS SELECT _statement
[WITH [CASCADED | LOCAL] CHECK OPTION]
ALGRITHM的取值有3个,分别是UNDEFINED | MERGE | TEMPTABLE,UNDEFINED表示MySQL将自动选择算法;MERGE表示将使用的视图语句与视图定义合并起来,使得视图定义的某一部分取代语句对应的部分;TEMPTABLE表示将视图的结果存入临时表,然后用临时表来实行语句。
CASCADED与LOCAL为可选参数,CASCADED为默认值,表示更新视图时要满足所有相关视图和表的条件;LOCAL表示更新视图时满足该视图本身定义的条件即可。
查看视图
DESCRIBE查看视图基本信息
DESCRIBE 视图名;
DESCRIBE等同于DESC,所以也可以写成:
DESC 视图名;
SHOW TABLE STATUS语句查看视图基本信息
SHOW TABLE STATUS LIKE ‘视图名’;
SHOW CREATE VIEW语句查看视图详细信息
SHOW CREATE VIEW 视图名;
在views表中查看视图详细信息
SELECT * FROM information_schema.views;
修改视图
CREATE OR REPLACE VIEW语句修改视图
CREATE [OR REPLACE][ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name[(column_list)]
AS SELECT_statement
[WITH[CASCADED | LOCAL] CHECK OPTION]
可以看到,修改视图的语句和创建视图的语句是一样的。
ALTER语句修改视图
ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name[(column_list)]
AS SELECT_statement
[WITH[CASCADED | LOCAL] CHECK OPTION]
更新视图
当视图中包含有如下内容时,视图的更新操作将不能被执行:
- 视图中不包含基表中被定义为非空的列。
- 在定义视图的SELECT语句后的字段列表中使用了数学表达式。
- 在定义视图的SELECT语句的字段列表中使用聚合函数。
- 在定义视图的SELECT语句中使用了DISTINCT,UNION,TOP,GROUP BY或HAVING子句。
删除视图
DROP VIEW [IF EXISTS]
view_name[,view_name]...
[RESTRICT | CASCADE]