MySQL视图
一、视图介绍及基本语法
1. 介绍
视图(View)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,
行和列数据来定义视图的查询中使用的表(基表),并且是在使用视图时动态生成的。
通俗来说,视图只保存了查询的SQL逻辑,不保存查询结果。所以在创建视图时,主要
工作就落在创建视图这条SQL语句上。
2. 基本语法
1. 创建:
Create [or replace] view 视图名称[(列名列表)] as select语句 [with[cascaded|local|check option]]
or replace:替换视图
2. 查询视图:
查看视图创建语句:show create view 视图名称;
查看视图数据:*select from 视图名称....;
3. 修改视图:
方式一:Create [or replace] view 视图名称[(列名列表)] as select语句 [with[cascaded|local|check option]]
方式二:alter view 视图名称[(列名列表)] as select语句 [with[cascaded|local|check option]]
4. 删除视图:
drop view [if exists] 视图名称 [,视图名称]...;**
3. 视图的检查选项
当使用With Check Option子句创建视图时,MySQL会通过视图检查正在更改的每一行,例如插入,更新,删除,以使其
符合视图的定义。MySQL允许基于另一个视图创建视图,它还会检查依赖视图中的规则
以保持一致性。为了确定检查范围,MySQL提供了两个选项:Cascaded和Local,默认值为Cascaded。
3.1 Cascaded
create or replace view v1 as select id,name from student where id <= 20;
create or replace view v2 as select id,name from v1 where id >=10 with cascaded check option;--基于v1建立v2
create or replace view v3 as select id,name from v2 where id <=15; --基于v2建立v3
insert into v3 values (6,'Tom');--插入失败
insert into v3 values (11,'Tom');--插入成功
insert into v3 values (17,'Tom');--插入成功
insert into v3 values (25,'Tom');--插入失败
判断思路:插入id时,因创建V3时没有cascaded选项,所以不会判断id<=15,又因为V3是基于V2创建,所以id会与id>=10判断,再因为V2基于V1创建,所以再判断id是否小于等于20,
因此,插入以上四条数据,结果分别返回失败,成功,成功,失败。
3.2 Local
只对SQL语句中包含with local check option的条件进行判断,没有就不会进行条件判断。
4. 视图的跟新及作用
4.1 视图的跟新
要使视图跟新,视图中的行与基础表中的行必须存在一对一的关系。如果视图包含以下任何一项,则该视图不可更新:
- 包含聚合函数或窗口函数:sum() min() max() count()等;
- 包含Distinct关键字;
- 包含:group by,having,union或union all
4.2 视图的作用
- 简单:视图不仅可以简化用户对数据的理解,也可以简化操作。一些经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部条件。
- 安全:数据库可以授权,但不能授权到数据库特定行和特定列上,通过视图用户只能查询和修改他们能看到的数据。
- 数据独立:视图可以帮助用户屏蔽真实表结构变化带来的影响。