视图简单来说就是从已经存储在数据表中的字段或数据中拿取一部分出来组成一张虚拟表,因为视图中的字段和数据均来自于已经存在的表,所以这些数据表对于视图来说称为基表,基表可以是一张,也可以是多张,因为是虚拟表,所以如果对视图的数据进行修改的话,那么关联的数据表里面的数据也会改变
1.视图语法
视图本身也是一张表,所以视图的语法和数据表类似
创建视图:
create [or replace] view 视图名称 as select语句;
查询视图:
show create view 视图名; 查看创建视图的语句
select * from 视图名; 查看视图数据
修改视图:
create or replace view 视图名称 as select语句; 创建视图的时候or replace可以省略,但修改则不行
alter view 视图名 as select语句;
删除视图:
drop view 视图名;
插入数据:
insert into 视图名 values(数据); 由于视图本身不存储数据,所以插入的数据在关联的数据表中
2.检查选项
在创建视图的时候添加检查选项的语句,那么后续对视图进行插入,更新,删除等操作的时候MySQL就会检查这些操作是否符合创建视图时的条件,如果有不符合的则不会允许操作
此外MySQL允许基于一个视图来创建另一个视图,所以为确定检查的范围,检查选项有cascaded和local两个选项,默认值为cascaded
create [or replace] view 视图名称 as select语句 with cascaded/local check option;
cascaded和local的区别:
假设有一个视图A,有where条件,没有加检查选项
然后基于A创建了视图B,也有where条件,同时加上了检查选项
此时往B中插入一条数据,如果检查选项为cascaded,那么MySQL除了会检查B的条件外还会往上检查和B关联的A的条件,即使是多级关联,也会一直往上检查,直到关联到真实的表数据
如果检查选项为local,那么就只会检查B的条件
3.视图更新
如果要更新视图,那么视图中的行与基表中的行必须是一对一的关系,所以如果出现下面的任意一项的话视图是无法更新的
- 聚合函数或窗口函数,比如count(),sum()等
- distinct
- group by
- having
- union或union all
关于视图的内容到这结束了,下一篇是MySQL的存储过程,完