1. 简介
视图(view)是一种虚拟存在的表。视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。通俗来讲,视图只保存了查询SQL逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就是落在创建这条SQL的查询语句上。
2. 视图的操作语法
create [or replace] view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option]
-- 创建视图
create or replace view jackiechai as select 姓名,性别 from 用户表 where 用户ID< 31;
查看创建视图语句:
show create view 视图名称
查看视图数据(怎么样查表就怎么样查视图)
select * from jakiechai;
create [or replace] view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option]
方式二
alter view 视图名称[(列名列表)] as select语句 [with[cascaded|local] check option]
drop view [if exists] 视图名称 [,视图名称] .....
3. 视图检查选项
当使用with check option子句创建视图时,mysql会通过视图检查正在更改的每个行,例如插入、更新和删除,以使其符合视图定义。Mysql允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保存一致性,为了确定检查的范围,mysql提供了两个选项:cascaded和local
,默认值为前者。
create or replace view jackiechai as select 姓名,年龄 from 用户表 where 年龄< 21;
insert into jackiechai VALUES('理想',30);
发现所依赖的原始表确实有数据插入
但视图中没有该条数据,因为(30>27),这样视图就失去了其意义,为了解决这个问题可以加上前面介绍的检查选项
create or replace view jackiechai as select 姓名,年龄 from 用户表 where 年龄< 27 with CHECK OPTION;
再次插入就会报错,因为不满足检查选项
local选项与cascaded的区别是,使用casecaded检查选项时,所以依赖的视图也会加上casecaded选项,而local不会给所依赖的视图加上local选项
4. 视图的更新与作用
要使试图可以更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则视图不可以执行更新(数据)操作:
- 聚合函数或窗口函数
- Distinct
- Group By
- Having
- Union或者Union All
简单
视图不仅仅可以简化用户对数据的理解,也可以简化他们的操作。哪些经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作每次指定全部条件。
安全
数据库可以授权,但不能授权到数据库特定行和特定的列上。通过视图用户只能查询和修改他们所能见到的数据
数据独立
视图可以帮助用户屏蔽真实表结构带来的影响