商标注册收费标准,电影站的seo,中小企业门户网站建设策略,大庆最新消息今天视图是什么 视图#xff08;View#xff09;是一种虚拟存在的表。视图中的数据#xff0c;来自定义视图的查询语句中#xff0c;使用的表#xff0c;并且是在使用视图时动态生成的。 简单讲#xff0c;视图只保存了查询的SQL逻辑#xff0c;不保存查询结果。所以我们在…视图是什么 视图View是一种虚拟存在的表。视图中的数据来自定义视图的查询语句中使用的表并且是在使用视图时动态生成的。 简单讲视图只保存了查询的SQL逻辑不保存查询结果。所以我们在创建视图的时候主要的工作就落在创建这条SQL查询语句上。
为什么要使用视图(视图的作用)
1.简化查询语句 与Java等语言中的方法一样对于重复使用到的查询语句(比如作为子查询代表一个列或者用于WHERE的条件判断)可以将其定义成视图。这样子使用时就直接调用视图即可项目越大越能简化查询语句。
2.保护数据安全 表可以授权但不能授权到 特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据也能帮用户屏蔽真实表结构变化带来的影响 。如果你想让别人只能看到一张表中的个别字段的数据此时就会使用到视图。
视图的基本操作
# 创建视图
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] 视图名称 [,视图名称] ... 注意想要使视图能够更新视图中的行与基础表中的行之间必须存在一对一的关系。 视图包含以下任何一项则该视图不可更新
A. 聚合函数或窗口函数SUM()、 MIN()、 MAX()、 COUNT()等B. DISTINCTC. GROUP BYD. HAVINGE. UNION 或者 UNION ALL
检查选项 当使用WITH CHECK OPTION子句创建视图时MySQL会通过视图检查正在更改的每个行例如 插入、更新、删除以使其符合视图的定义。 MySQL还允许基于另一个视图创建视图它还会检查依赖视图中的规则以保持一致性。为了确定检查的范围mysql提供了两个选项 CASCADED 和 LOCAL默认值为 CASCADED 。
CASCADED假设有两个视图为v1和v2。v2是基于v1创建的如果v2的检查规则定义为CASCADED(或者未指定则默认也为CASCADED)。此时使用v2插入数据时不仅会检查v2的检查条件还会检查v1的检查条件
CREATE OR REPLACE VIEW v1 AS SELECT empno,ename,sal FROM emp_back WHERE sal2000;CREATE OR REPLACE VIEW v2 AS SELECT empno,ename,sal FROM v1 WHERE sal1000
WITH CASCADED CHECK OPTION;INSERT INTO v2 VALUES(8080,TOM,1888);
INSERT INTO v2 VALUES(8081,MARY,2500); 执行上述代码时8080可以插入成功但是8081插入不会成功。虽然8081的sal为2500满足v2的sal1000但是不满足v1的sal2000所以插入不成功。
LOCAL: 执行检查时只会检查v2不会检查v2的关联视图v1
将之前v2的CASCADED修改为LOCAL此时就可以发现8081可以插入成功了因为它不再检查v1的sal2000。