视图操作基本语法
-
创建视图
CREATE [OR REPLACE] VIEW 视图名称 [(列名列表)] AS SELECT语句 [WITH [CASCADED | LOCAL] CHECK OPTION]
- 使用
WITH CHECK OPTION
确保插入、更新或删除操作符合视图的定义条件。 CHECK OPTION
包含两种模式:CASCADED
:递归检查当前视图及所有依赖视图的条件(默认)。LOCAL
:仅检查当前视图的条件。
- 使用
-
查询视图
- 查看视图的创建语句:
SHOW CREATE VIEW 视图名称;
- 查询视图中的数据:
SELECT * FROM 视图名称;
- 查看视图的创建语句:
-
修改视图
- 方式一:重新创建视图
CREATE [OR REPLACE] VIEW 视图名称 [(列名列表)] AS SELECT语句 [WITH [CASCADED | LOCAL] CHECK OPTION]
- 方式二:直接使用
ALTER
修改视图ALTER VIEW 视图名称 [(列名列表)] AS SELECT语句 [WITH [CASCADED | LOCAL] CHECK OPTION]
- 方式一:重新创建视图
-
删除视图
DROP VIEW [IF EXISTS] 视图名称;
检查选项
- CASCADED 选项会递归检查视图的所有上层条件。
- LOCAL 选项仅检查当前视图的条件。
- 如果一个视图没有
CHECK OPTION
,则插入或更新数据时不会检查其自身条件,但会检查依赖视图的条件。
WITH CASCADED CHECK OPTION
的详细工作机制
-
作用
CASCADED CHECK OPTION
会确保数据操作满足当前视图和所有依赖视图(父视图)的条件。
-
单层视图
- 在单层视图中,
CASCADED
和LOCAL
没有区别,只会检查当前视图的条件。
- 在单层视图中,
-
多层视图中的条件检查
- 在多层视图结构中,即使最终视图(如
v3
)没有WITH CHECK OPTION
,但如果其上层视图(如v1
和v2
)有CASCADED CHECK OPTION
,则在v3
中插入或更新数据时,仍然需要满足上层视图的条件。
示例:
CREATE VIEW v1 AS SELECT id, name FROM student WHERE id <= 20 WITH CASCADED CHECK OPTION; CREATE VIEW v2 AS SELECT id, name FROM v1 WHERE id >= 10 WITH CASCADED CHECK OPTION; CREATE VIEW v3 AS SELECT id, name FROM v2 WHERE id <= 15; -- 没有 WITH CHECK OPTION
v1
的条件是id <= 20
,有CASCADED CHECK OPTION
。v2
的条件是id >= 10
,有CASCADED CHECK OPTION
。v3
的条件是id <= 15
,但没有WITH CHECK OPTION
。
在
v3
中插入或更新数据时:- 必须符合
v1
和v2
的条件(即id <= 20
和id >= 10
),因为v2
和v1
都有CASCADED CHECK OPTION
。 - 不需要检查
v3
的条件(id <= 15
),因为v3
没有WITH CHECK OPTION
。
- 在多层视图结构中,即使最终视图(如
查看所有视图
在 MySQL 中,可以通过以下语句查看当前数据库中的所有视图:
SHOW FULL TABLES WHERE Table_type = 'VIEW';
视图的更新条件
为了使视图可更新,视图中的行与基础表中的行必须存在一对一的关系。如果视图包含以下任何一项,则视图不可更新:
- 聚合函数或窗口函数(如
SUM()
、MIN()
、MAX()
、COUNT()
等) DISTINCT
GROUP BY
HAVING
UNION
或UNION ALL
视图的作用
-
简化
视图可以简化用户对数据的理解,简化他们的操作。常用的查询可以定义为视图,用户在后续操作时无需重复指定相同的查询条件。 -
安全
数据库可以授予视图权限,但不能授予特定表的特定行或列权限。通过视图,用户只能访问视图中定义的数据,从而提高数据安全性。 -
数据独立
视图可以帮助用户屏蔽真实表结构变化带来的影响,使得数据库结构变化不会影响到用户操作的查询语句。