1.什么是视图
视图是一种虚拟存在的表,视图中的数据并不在数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。视图只保存SQL逻辑,不保存结果。
2.视图的语法
创建视图:
create [or replace] view view_name as select * from tb1 [with [cascaded|local] check option];
--view_name 视图名称
查询视图:
--1.查看创建视图的语句:
show create view view_name;
--2.查看视图数据:
select * from view_name ...;
修改视图:
1.create [or replace] view view_name as select * from tb1 [with [cascaded|local] check option]
2.alter view view_name as select * from tb1 [with [cascaded|local] check option]
删除视图:
drop view [if exists] view_name ...;
3. 视图的检查选项
当使用with check option 字句创建视图时,MySQL会通过视图检查正在更改的每个行,使其符合视图定义。MySQL允许基于一个视图创建视图,它还会检查依赖视图中的规则以保持一致性。为了确定检查范围,MySQL提供了两个选项:
cascaded(级联,默认):不仅检查当前视图,并且检查这个视图所依赖的视图。如下图,由于V2使用的是cascaded,V2依赖V1,所以V1也默认添加了cascaded,V1,V2做增删改时都会判断条件。V3增删改不检查条件。
local:只对当前视图检查是否符合检查规则,如果当前视图所依赖的视图有条件,则该条件也会判断,但只针对V2而言。如下图,V2做增删改时,要判断条件满足大于等于10且小于等于15;但与cascaded不同的是,V1做增删改时,不检查条件。V3增删改不检查条件
4.视图的更新
要使视图可以更新,则视图中的行和基础表中的行必须是一对一的关系,如果该视图包含聚合函数或窗口函数,distinct,group by ,having,union 或union all 则视图不能更新。
5.视图的作用
①简化,对于经常使用查询的SQL可以定义为视图,方便SQL的编写;
②安全,视图可以做到脱敏的效果,通过视图,用户只能查询和修改他们能看到的数据;
③数据独立,帮助用户屏蔽真实表结构变化带来的影响。