目录
MySQL 视图是一种虚拟表,视图中的数据并不在数据库中真实存在,行和列数据来定义视图的查询中使用的表,并且是在使用视图时动态生成的。
通俗来讲,视图只保存了查询的sql逻辑,不保存查询结果。所以我们在创建视图的时候,主要的工作就落在创建这条sql查询语句上
它是由一个 SQL 查询结果集构成的。以下是关于 MySQL 视图的一些要点:
1、作用
1. 简化复杂查询:可以将复杂的查询逻辑封装在视图中,对于经常使用的复杂查询,使用视图可以让后续的查询更加简洁方便。
2. 数据安全:可以限制用户对特定数据的访问,只展示用户需要看到的部分数据,提高数据的安全性。
3. 保持数据独立性:如果底层表的结构发生变化,只要视图的查询逻辑不受影响,使用视图的应用程序无需修改。
2、视图
2.1创建视图
使用 CREATE VIEW 语句来创建视图,例如:
CREATE [OR REPLACE]VIEW 视图名称[(列名列表)] AS SELECT 语句[with [cascaded|local] check option]
create or replace :表示创建或替换视图
select 查询的表叫做基表
2.2查询
查看创建视图语句:show create view 视图名称;
查看视图数据:select*from 视图名称.......;
视图名称后面跟查询条件,表怎么查询,视图就怎么查询
2.3修改
方式一:create [or replace] view 视图名称[(列名列表)]as select 语句[with [cascaded|local] check option]
方式二:alter view 视图名称[(列名列表)]as select 语句[with [cascaded|local] check option]
2.4删除
drop view if exists 视图名称;
3.视图检查选项
当使用with check option 子句创建视图时,MYSQL会通过视图检查正在更改的每个行,例如插入,更新,删除,以使其符合视图的定义。MYSQL允许基于另一个视图创建视图,它会检查依赖视图中的规则以保持一致性。为了确定检查的范围。MYSQL提供了两个选项:
cascaded 和local ,默认值为cascaded
向视图中插入数据:
insert into stu_v_1 values (5,'张三');
在基表中可以看见,但是在视图中看不见,这是因为在创建视图的时候指定了条件,id<5,也就是通过视图插入的数据,视图查不到(不满足指定条件),满足指定条件是可以查到的
为了避免上面这种情况,在mysql中,在视图创建的时候提供了一种语法,我们可以在后面加上检查选项来避免上述情况的发生
[with [cascaded|local] check option]
3.1cascaded(级联):
create or REPLACE view stu_v_1 as select student.id,student.name from student where id<5;
当我们写上这么一条语句时,插入id大于5或id小于5的数据都是可以的
create or REPLACE view stu_v_2 as select student.id,student.name from student where id>2 with cascaded check option;
在写上第一条语句的基础上在写上上面这条语句,当我们进行插入数据时,不仅要检查上面这条语句的条件还要检查第一条语句的条件,相当于在第一条语句后面也加上了with cascaded check option;
总结cascaded:
1.当视图创建或替换时,并且所有的上级均为加检查选项,则在插入数据时,不会对数据进行检查
2.若在创建或替换视图时,视图的某一级具有检查选项,就会对数据进行检查,从下往上,第一个检查选项上面的条件都会对插入的数据进行检查
3.2 local
create or REPLACE view stu_v_1 as select student.id,student.name from student where id<5;
create or REPLACE view stu_v_2 as select student.id,student.name from student where id>2 with local check option;
当第二条语句执行,v2替换掉v1视图,当插入数据时只会对v2的条件进行检查选项,不会对上一级的条件进行检查,如果想对上一级的条件进行检查就需要在上一级视图加上local
local总结:
local检查选项只会对当前视图进行检查,即只会检查当前和上级含有检查选项的条件进行检查
4.更新即作用
更新:
要使视图可更新,视图中的行与基础表中的行之间必须存在一对一的关系。如果视图包含以下任何一项,则该视图不可更新:
1.聚合函数或窗口函数(sum(),min(),max(),count()等)
2.distinct
3.group by
4.having
5.union或者union all
如果基础表中的两条数据对应视图中的一条数据,是不能对视图进行插入操作的
作用:
1.操作简单:
视图不仅可以简化用户对数据的理解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,从而是的用户不必为以后得操作每次指定全部的条件。
2.安全
数据库可以授权,但不能授权到数据可特定行和特定列上。通过视图用户只能查询和修改他们所能见到的数据
5.删除视图
使用 DROP VIEW 语句删除视图,例如:
DROP VIEW view_name;