码迷,mamicode.com
首页 > 其他好文 > 详细

来,看视图

时间:2018-01-05 17:26:21      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:多个   相对   ble   开发   red   from   图表   str   行修改   

    一幅好的画蕴含大道,所以别小瞧数据库的视图,每回都能发挥好作用的视图可不那么简单,无论对数据库性能的影响也好,编译检索速度都是杠杠的,一起来看看啥叫视图,视图与数据表啥关联?视图建立在基础表上的虚表。更好的提供存储查询,不会存储数据(物化视图除外),这是很重要的一点不存储数据,也能对视图进行修改等操作的,视图几类:1、关系视图 2、内嵌视图 3、对象视图 4、物化视图 分享一下学习的心得与君共勉.

    一、关系视图

        关系视图应该算是最简单用的挺多的一种视图,关系型数据库我们以前介绍过。关系视图理解起来简单许多,字段关联,表表关联。也可以看做简单或者复杂的查询语句,输出的虚表,因为没有数据(建立在源表上)所以比较节省资源,数据也相对安全一些,大量的查询语句也可以省略当做表来查询不亦乐乎。

        格式:

            create view view_table as select ............................ from emp;

        解释

            create view是创建视图的关键字和table一样, as 后面跟查询定义语句 指定 from 基础表(create table创建的表);那么视图算是创建完成,select语句水平高低直接决定你视图的质量。

        格式:

            create or replace view view_table as select .................... from emp;

        解释:

            视图修改方式很独特,就是重新进行编译,or replace 指定替换原来的视图。

        联结视图就是表与表字段相关联,我们在查询select语句有可能对多表关联,可以再from后指定表的时候如EMP e,KEL k;用逗号隔开多个表,这样区分列是哪个表怎样关联思路清晰。

        编译视图,视图建立在基础表实现的,当我们的基础表更新了之后,我们要从新编译视图表才可以使用从新查询,可是我们发现使用视图时候没有编译过也是最新的信息,那么我们一起来看

        格式:

            select object_name,status,from user_objects where object_name = '视图名字' and object_type='VIEW';

        解释:

            说一说user_objects这个视图存储数据库所有对象信息,视图啊表啊约束等,我们看视图的具体状态就可以了

            状态两种1、VALID(有效) 2、INVALD(无效)

        我们更新基础表之后,查询视图状态会是INVALD无效的这时候我们使用

        格式:

            alter view view_tables compile;

        解释:

            这条命令是重新编译视图,这时候在查看视图状态为VALID可用,那么平常在我们为什么没去编译,因为在Oracle每次真正执行查询之前都会自动编译视图!还有只有修改表结构才影响视图有效性,单纯的插入新数据是不会影响视图的有效性的。

        下面在说一种比较特殊,原来创建视图的时候指定某一行数值,比如id=6这一行创建的视图,当我们更改基础表数据id=6改成id=7(表中不存在id=6了),视图重新编译的时候基础表没有6将会查询为空,应该很好理解。同样你把列明修改了,重新编译的时候找不到列会失败!

        再来说一种

            那么在有些特殊情况,一些表在没创建就需要把视图创建成功,我们都说了视图在基础表上建立的那么这一种方法叫强制建视图

        格式:

            create view force view_tables as select ..... from 表;

        解释:

            关键字force我们要对表结构和业务特别熟悉,在工期有特别需求的情况下来尝试用这种方式加快工期的效率,那么创建好之后状态是无效的,当按照预期被满足视图之后便可使用。

        格式:

            create table_name,column_table,updatable,insertable,deletable from user_updatable_cloumns where table_name='VIEW_TABLES';

        解释:

            前面说过视图是可以修改插入等操作,如何看一个视图是否能进行修改,每一列详细信息尽在user_updatable_columns,查一查看一看

        选项:with check option这个适用于保证数据的完整性,使基础表更新后视图能同步更新保证数据完整性!

        1、数据的安全 2、数据的整合 3、数据的透明


    二、内嵌视图

        其实我也一直搞不懂子查询和内嵌视图的本质区别含义,像是过渡集,一次使用将不再使用。在本次的内嵌视图更像子查询(功能类似),只有在执行过程中有效,为了将某一次查询的结果作为本次查询的输入的结果使用。

        格式:

            select * from (select ...... from emp);

            update (select saly from emp) set sal = sal +300;

        解释:

            可以用过增删改查等操作,灵活方便,而且对于数据库来说,不会进行大量的I/O操作!,会大大节省数据库资源提高性能。查看资料SQL


    三、对象视图

        什么是对象视图,什么是对象,学过编程JAVA等语言的朋友熟悉不过了,对象概念在此不啰嗦疑问有百度,面向对象编程思想深入我们人心,所以数据库也有对象这一操作。

        格式:

            create type employee is object (name varchar2(20),job varchar2(10));

        解释:

            创建一个对象!create type 是创建类型, is object是代表这个类型是对象,然后我们就可以创建对象呢视图

        格式:

            create or replace view ov_tables of employee with object oid(tables_id) as select................ from 源表;

        解释:

            of employee的意思是新视图基于对象类型是employee,with object oid后面是主键。

        格式:

            select view_name,view_type,old_text from user_views where view_name='视图名字' or view_name = '视图基于的对象类型';

        解释:

            当查询结果view_name,view_type为null可以分辨这就是对象视图

        

    四、物化视图

        顾名思义物理化视图,那么我们就知道物理化了都就会存储在我们的磁盘中,占一定的空间大小,与临时表更为亲近,但是数据不会再特定情况被清空,数据可重复用适用于频繁的读取的场所

        物理化视图对于大数据的分析尤为重要,统计一个百万的记录总和平均值问题,将耗费大量的数据库资源时间。可以通过这个来改善,对表一次统计,结果存储物化视图,以后每次直接查询。不适合频繁的更新,每次更新都会物化视图也更新,代价很大。

        格式:

            create materialized view mv_tables builb immediate refresh on commit enable query rewrite as select ................. from 表 group by sex;

        解释:

            materialized view 物化创建,build immediate立即编译视图,refresh on commit 要求Oracle数据库一但修改,视图应该自动更新,enable query rewrite表示启动查询重写功能.

        格式:

            select mview_name,query from user_mviews where mview_name = '物化视图名字';

            select object_name,object_type,status from user_object where object_name='物化视图';

        解释:

            查询物化视图的下次内容

        物化视图数据加载

            在创建视图的时候使用了build immediate,该选项用于加载物化视图,另一个选项build deffered,表示延迟载入数据。

            使用延迟加载时必要的,当基础表数据巨大时候,载入数据会耗费大量的资源,延迟的话后续开发数据库不太繁忙。

            refresh on commit,当基础表被提交后,自动更新,物化更新与关系视图更新不同,物化更新每次都会把数据存储起来!不适合频繁数据更新

        查询重写

            enable query rewrite启动查询重写,是指对Oracle的基础表查询,按照优化原则,查找恰当的物化视图,如果获得优化视图,转化物化视图查询。

        这几种视图关系内嵌比较重要,大多数关于数据库工作都会用到。

            

来,看视图

标签:多个   相对   ble   开发   red   from   图表   str   行修改   

原文地址:http://blog.51cto.com/13352079/2057855

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!