视图是一种虚拟存在的表。
1、创建视图需要 CREATE VIEW 权限,并且对于查询涉及的列有 SELECT 权限。如果使用 CREATE OR REPLACE 或者 ALTER 修改视图,还需要该视图的 DROP 权限
-- 创建视图
CREATE[ OR REPLACE ] [ALGORITHM={UNDEFINED|MERGE|TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH[CASCADE|LOCAL|CHECK OPTION]]
-- 修改视图
ALTER [ALGORITHM = {UNDEFINED|MERGE|TEMPTABLE}] VIEW view_name [(column_list)] AS select_statement [WITH[CASCADE|LOCAL|CHECK OPTION]]
-- MySQL 视图定义有一些限制。比如 FROM 关键字后面不能包含子查询
-- WITH[CASCADE|LOCAL|CHECK OPTION] 决定了是否允许更新数据使用记录不再满足视图的条件
-- LOCAL 只要满足本视图的条件就可以更新
-- CASCADED 则必须满足所有针对该视图的所有视图的条件才可以更新(默认)
-- 删除视图(前提是必须具有 DROP 权限)
-- 支持一次性删除一个或多个视图
DROP VIEW [IF EXISTS] view_name [,view_name] ... [RESTRICT|CASCADE]
-- 视图查看
-- SHOW TABLES 同时包含 TABLE 和 VIEW
-- SHOW TABLE STATUS 也同时包含视图的信息
SHOW TABLE STATUS [FROM db_name] [LIKE 'pattern']
-- 如果需要查看某个视图的定义
SHOW CREATE VIEW view_name
2、视图的可更新性和视图中查询的定义有关系,以下类型视图是不可更新的
- 包含以下关键字:聚合函数(SUM MIN MAX COUNT)、DISTINCT、GROUP BY、HAVING、UNION、UNION ALL
- 常量视图
- SELECT 中包含子查询
- JOIN
- FROM 一个不能更新的视图
- WHERE 字句的子查询引用了 FROM 字句中的表