674 字
3 分钟
MySQL09-视图
2023-06-06
2023-11-25

详细的描述了MySQL中的视图。

视图的简介#

视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。
​通俗的讲,视图只保存了查询的SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作在创建这条SQL查询语句上。

视图的语法#

创建#

CREATE [OR REPLACE] VIEW 视图名称 [(列名列表)] AS SELECT 语句[WITH[CASCADED|LOCAL] CHECK OPTION ]

查询#

SHOW CREATE VIEW 视图名称; --查看创建视图语句
SELECT * FROM 视图名称.......; --查看视图数据

修改#

-- 方式一
CREATE [OR REPLACE] VIEW 视图名称(列名列表)] AS SELECT语句 [WITH[CASCADED|LOCAL] CHECK OPTION]
-- 方式二
ALTER VIEW 视图名称(列名列表)] AS SELECT语句 [WITH[CASCADED|LOCAL] CHECK OPTION]

删除#

DROP VIEW [IF EXISTS] 视图名称[视图名称] ...

视图的检查选项#

​ 当使用 WITH CHECK OPTION 子句创建视图时,My5QL会通过视图检查正在更改的每个行,例如插入,更新,删除,以使其符合视图的定义。

​ MySQL允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围,mysql 提供了两个选项: CASCADED和LOCAL,默认值为CASCADED。

cascaded#

WITH CASCADED CHECK OPTION 约束通过可更新视图执行的插入和更新:新行必须满足当前视图条件,并递归满足所依赖视图的条件,即使底层视图没有显式声明检查选项也要检查。未写检查范围关键字时默认为级联检查;它不是给删除操作附加同样的新行条件,也不会把虚拟视图变成保存查询结果的实体表。

local#

WITH LOCAL CHECK OPTION 检查当前视图条件,并继续沿依赖关系处理底层视图自身的检查规则;底层视图若没有检查选项,就不强制检查它自己的条件,但仍继续向下递归。因此,局部检查不等于完全忽略所有底层检查,也不能绕过底层已声明的级联约束。这里关注的是插入和更新后行是否仍满足相应可见条件。

视图的更新#

要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则该视图不可更新:

  1. 聚合函数或窗口函数(SUM()、MIN()、MAX()、COUNT()等)
  2. DISTINCT
  3. GROUP BY
  4. HAVING
  5. UNION 或者 UNION ALL