??视图是从一个表或多个表中导出的表,是一种虚拟存在的表,不占用存储空间。视图可以使用户的操作更方便,并且可以保障数据库系统安全性。
??视图中保存的仅仅是一条select语句,其数据源自数据库表或其他视图。视图的作用类似于筛选,且不占用存储空间。
??当调用视图时才执行视图中的SQL语句,进行数据读取操作。视图中的内容没有存储,而是在视图被引用时才派生数据,即即时引用。这样的好处是不需要维护视图的内容。
??创建视图需要具有CREATE VIEW权限,和查询涉及的列的SELECT权限。
create [algorithm = {undefined | merge | temptable}]
view view_name [(state1, state2...)]
as 查询语句
[with [cascaded | local] check option];
参数 | 说明 |
---|---|
algorithm | undefined表示MySQL自动选择使用的算法;merge表示将使用视图的语句与视图的定义合起来,使视图定义的某部分取代语句的对应部分;temptable表示将视图的结果存入临时表,然后使用临时表执行语句 |
查询语句 | 一个完整的查询语句 |
cascaded、local | cascaded表示更新视图时满足所有相关视图和表的条件,local表示更新视图时满足该视图本身的定义条件即可 |
with check option | 更新视图时保证在该视图的权限范围之内 |
??删除视图需要具有drop权限。
drop view [if exsts] view_name[, view_name2...] [restrict | cascade];
??查看视图需要具有show view权限,查看视图指查看数据库中已经存在的视图的定义。
-- 法一
[describe | desc] view_name;
-- 法二
show table status like ‘view_name‘;
-- 法三
show create view ‘view_name‘;
-- 法四
select * from information_schema.views where table_name=‘view_name‘;
??修改视图指修改数据库中已经存在表的定义,当基本表的某些字段发生改变时们可以通过修改视图来保持视图与基本表一致。
[create or replace | alter] [algorithm = {undefined | merge | temptable}] view view_name [{state1, state2...}]
as 查询语句
[with [cascaded | local] check option];
??对视图的更新其实就是对表的更新,更新视图是指通过视图来插入、更新、删除表中的数据。因为视图是一个虚拟表,没有数据,视图更新都是通过转化到基本表来更新。
原文:https://www.cnblogs.com/bpf-1024/p/14059663.html