视图:
一种虚拟存在的表,视图中的数据并不数据库中实际存在,行和列数据来自定义视图的查询中使用的表,并且是在使用视图时动态生成的
通俗的讲,视图只保存了查询的sql逻辑,不保存查询结果
#创建
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] 视图名称 [,视图名称]
视图的检查选项:
当使用with check option子句创建视图时,mysql会通过视图检查正在更改的每一行,例如插入,删除,更新,以使其符合视图的定义。mysql允许基于另一个视图创建视图,它还会检查依赖视图中的规则以保持一致性,为了确定检查的范围,mysql提供了两个选项:cascaded和local,默认cascaded
如下图所示,此时向视图里面插入一条数据实际上是在address表中插入数据
当插入不满足条件的数据时,会插入主表中,并不会出现在视图中
当创建视图时加上with cascaded check option,会出现检查选项失败,阻止插入
如下面,v2添加了检查选项,此时不仅检查v2,也要检查v1是否满足条件
若插入18,会成功,因为v3没有检查选项,此时会检查v2和v1;插入28,不会成功
Local:
向v1插入数据,不会检查;向v2插入数据,会检查当前是否满足,然后递归去找v1,是否满足v1的检查选项
视图的更新:
要是视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系,如果视图包含以下任意一项,则该视图不可更新:
-
聚合函数或窗口函数(count(),max(),min()等)
-
Distinct
-
Group by
-
Having
-
union或union all
作用:
1.简单:
简化用户对数据的理解,简化操作,经常使用的查询可以被定义为视图,从而使得用户不必为以后的操作指定全部的条件
2.安全:
数据库可以授权,但不能授权到数据库的特定行和特定列上。通过视图用户只能查询和修改他们所见到的数据
3.数据独立:
帮助用户屏蔽真实表结构变化带来的影响