视图说白了就是一个通过数据库实表建立起来主要用于应用查询的虚表(也可以理解为是存储在数据库中的查询的SQL语句),他是不占数据库内存的。他的存在一方面可以隐藏一些数据,使一些非必要展示出去的字段隐藏起来不展示;另一方面是可以使复杂的查询易于理解和使用(以一张表的形式展现出来)。
一些基本的关于视图的操作(例如create view、create or replace view、drop view等)就省略不讲了,主要是记录一下关于视图权限的设置及更新方面的限制。
视图权限设置:[WITH [CASCADED | LOCAL] CHECK OPTION]:表示视图在更新时保证在视图的权限范围之内,cascade是默认值,表示更新视图的时候,要满足视图和表的相关条件;local表示更新视图的时候,要满足该视图定义的一个条件即可。
TIPS:推荐使用WHIT [CASCADED|LOCAL] CHECK OPTION选项,可以保证数据的安全性 。
对于with check option用法,总结如下:
通过有with check option选项的视图操作基表(只是面对单表,对连接多表的视图正在寻找答案),有以下结论: 插入后的数据,通过视图能够查询出来就符合WITH CHECK OPTION 否则就不符合;
首先视图只操作它可以查询出来的数据,对于它查询不出的数据,即使基表有,也不可以通过视图来操作。
1.对于update,有with check option,要保证update后,数据要被视图查询出来
2.对于delete,有无with check option都一样
4.对于insert,有with check option,要保证insert后,数据要被视图查询出来
对于没有where 子句的视图,使用with check option是多余的
基本格式如下:
create view <视图名称>[(column_list)]
as select语句
with check option;
视图更新:某些视图是可更新的,可以通过对视图进行update、delete或insert等操作来更新基表的内容。对于可更新的视图,在视图中的行和基表中的行必须具有一对一的关系。但实际使用过程中,有很多视图是不可更新只供查询的。若视图包含下述结构中的任何一种,那它就是不可更新的;
· 聚合函数(SUM(), MIN(), MAX(), COUNT()等)。
· DISTINCT
· GROUP BY
· HAVING
· UNION或UNION ALL
· 位于选择列表中的子查询
· Join
· FROM子句中的不可更新视图
· WHERE子句中的子查询,引用FROM子句中的表。
· 仅引用文字值(在该情况下,没有要更新的基本表)。
· ALGORITHM = TEMPTABLE(使用临时表总会使视图成为不可更新的)。