视图
介绍:视图(view)是一种虚拟存在的表,视图中的数据并不在数据库中实际存在,行和列数据都来自定义视图的查询中使用的表,并且是在使用视图时动态生成的。
视图只存了查询的SQL逻辑,不保存查询结果,创建视图,主要工作在创建SQL查询语句上
- 创建
create [ or replace ] view 视图列表(列名列表)] as select 语句 [ with ( cascaded | local ) check option]
eg: create view stu_v_1 as select id,name from student where id<=10;
- 查询
查看创建视图语句:show create view 视图名称;
查看视图数据:select * from 视图名称
- 修改
alter view 视图名称 as ;
alter view stu_v_1 as select ....;
- 删除
drop view [ if exists ] 视图名
drop view if exists stu_v_1;
with cascade local check option;
视图检查选项:
当使用上述语句时,创建视图时,MySQL会通过视图检查正在更改的每个行,例如:插入、更新、删除,以使其符合视图的定义。MySQL允许另一个视图创建视图,它还会使依赖视图中的规则以保持一致性。为了确定检查的范围。
MySQL提供了两个选项:cascade和local ,默认值为cascade
级联:
vi id < 20
v2 from v1>10 with cascade
v3 from v2 <15
v2要检查v1的条件
local不会查上一级的条件,除非上一级也带local,才会检查
- 视图的更新
要使视图可更新,视图中的行与基础表的行之间必须存在一对一的关系。如果视图包含以下任一项,则该视图不可更新。
- 聚合函数或窗口函数(sum()、min()、max()、count()等)
- distinct
- groupby
- having
- union或union all
作用:
- 简单
可简化用户对数据的理解,也可简化他们的操作。
那些被经常查询可以被定义为视图,从而使得用户不必为后面的操作每次指定全部的条件。
- 安全
数据库可以授权,但不能授权到数据库特定行和特定的列上,通过视图用户只能查询和修改他们所能见到的数据。
- 数据独立
视图可帮助用户屏蔽真是表结构的变化带来的影响
例题:1.为提高表的安全性,在操作tb_user表时,只能看到用户的基本字段,屏蔽手机号和邮箱字段。
2.查询每个学生所选修的课程,这个功能在很多的业务中都有使用到,为了简化操作,定义一个视图。
1.create view tb_user_view as select id, name profession, age,gender, status, createtime from tb_user select * from tb_user_view;
2.create view tb_stu_course_view as select s.name from student s,student_course;