关于oracle视图小结

关于oracle的视图小记:
一.
视图:就是对SQL语句的封装,使用起来更方便.不易出错

优点:
  1.简化数据操作:视图可以简化用户处理数据的方式
  2.着重于特定数据:不必要的数据或敏感的数据可以
    不出现在视图中(完成数据的筛选显示)
  3.安全性高:视图提供了一个简单而有有效的安全机制,可以定制不同用户
    对数据的访问权限
  4.向后兼容性:视图使用户在表的架构更改时为表创建向后兼容接口
二视图分两种:
  注意:
    1.在创建与使用带检查约束是的视图时,
      with check option与with read only 不能共存
    2.with check option 作用范围包括(单个值,枚举,范围)
    3.with check option与with read only区别:
      with check option :只约束当前视图的条件字段不能被改变
      with read only :约束的所有字段都不能被改变
  第一种:简单的非物化的视图:
    就是纯粹的对SQL语句进行封装
  创建与修改视图的语法:
      create [or replace] [force] view view_name as SQL语句
      [with check option]
      [with read only]
    注;[]内是可选项
    1.or replace: 有就同名的视图,就替换(把原先的删除在新建一个),没有就直接新建一个视图
    2.force: 不管基表是否存在ORACLE都会自动创建该视图(为视图提供了向后兼容
      的接口,可以在没有某表时也能成功创建视图)
    3.subquery: 一条完整的select 语句,可以在该语句中定义别名
    4.with check option: 插入或修改的数据必须满足视图定义的约束
    5.with read only: 该视图上不能进行任何DML操作
    注:
      1>.4.5不能共存
      2>.:其实视图的修改就是将原来的视图删除再重新建一个名字一样的
        新视图
    删除视图:
      drop view 视图名;
  第二种:物化视图
    在内存中有存储空间,当效率要比去查表要快,相当于在内存中新建了一
    个表,是牺牲了内存去换取效率

    创建物化视图的语法:
      create meterialized view 视图名字
      [build immediate | build deferred]
      refresh [fast|complete|force]
      [
        on [commit | demand] |start with (start_time) next (next_time)
      ]
      sql语句

    1.build immediate:是在创建视图的时候就生成数据
    2.build deferred:则在创建时不生成数据,以后根据需要在 生成数据
      1.2默认是1
    3.refresh
      1.fast:刷新采用增量刷新,只刷新上次以后进行的修改
      2.complete:对整个视图进行完全的刷新
      3.force:oracle会自动判断是用fast还是complete
      1.2.3默认3
    4.on [commit | demand]:刷新模式:
      demand:只需要手动刷新物化视图(默认)
      commit :在基表发生改变时自动刷新
      start with (start_time) next (next_time):
        start_time:开始刷新的时间
        next_time:每次刷新时间的间隔
    删除物化视图:
      drop meterialized view 物化视图名字
  物化视图的分类:
    1.创建时生成数据
    2.创建时不生成数据
    3.自动刷新数据
    4.手动刷新数据
    5.增量刷新
    注意:创建增量刷新视图前:要先为视图中用到的表创建物化视图日志
    例:
    --创建增量刷新的物化视图
    --首先要创建物化视图日志
      create materialized view log on dept with rowid
      create materialized view log on emp with rowid
    --创建物化视图
      create materialized view view_name
      refresh
      on commit
      as
      select e.* from emp e,dept d where d.deptno=e.deptno

    物化视图日志中的字段含义:
      snaptime$$:用于表示刷新时间
      dmltype$$:用于表示DML操作类型,
           I表示insert ,D表示delete
           U表示update
      old_new$$:用于表示这个值是新值还是旧值
            N(ew)表示新值,O(ld)表示旧值
            U表示update操作
      change_vector$$:表示修改矢量,用来表示被修改的是哪个或哪几个字段,此列是raw类型

              其实oracle采用的方式就是用每个bit位去映射一个列插入操作显示为:fe,

              删除显示为:oo 更新操作根据更新的字段的位置而显示不同的值.

              当我们手动刷新物化视图后,物化视图日志被清空,物化图更新





原文地址:https://www.cnblogs.com/lkyang/p/8401823.html