• Oracle中的视图


    1- 什么是视图

    视图是一个虚拟表

    视图是由sql查询语句产生的

    视图真实存在 但是不存储数据

    视图中的数据 只是对 基表(源数据表) 中的数据的引用

    总的来说 视图可以简化数据

    用户,订单,物流 三个表进行关联 吧很复杂的sql查询语句存储成一个视图 

    获取结果就可以直接查询视图 不用再重复的进行sql查询

    并且提供一定的安全性 以及 向后兼容性

    视图你可以理解为   从原来的很多表中 select出你需要的几个字段信息进行查询 并且形成视图

    无需重复查询,通过原表select出视图 。并且可以通过原表同步数据到t2表格

    如果删除原表 则视图也无法查询

    语法格式:

    create [or replace] [force] view view_name
    as 
    subquery
    [with check option ]
    [with read only]

    • or replace

      • 替换已存在的视图

    • force

    • with check option

      • 不能修改视图形成字段的数据

    • with read only

      • 只读不能进行数据修改

    with check option的作用

    • 简单视图 中的任意数据都可以进行任意操作

    • with check option 只要不影响我们的非视图数据就可以操作

    with read only

    视图不能进行任何的dml操作(增删改)

    or replace

    替换原有的视图

    force

    • 作用

      • 创建一个没有源数据表的视图

    • 删除视图

      • drop view 视图名

    2-复杂视图

    • 定义

      • 多表 聚合函数 子查询 等

    • 注意

      • 不要dml操作 很容易出错

    3-物化视图

    • 什么是物化视图

      • 视图 是不会存储数据的

      • 物化视图 是真实存储数据

    • 为什么要物化视图

      • 加快查询速度

      • 数据量变大 视图查询速度比较慢

      • 物化视图 查询速度比较快

      • meger on read

    • meger on write  <<加快数据同步>>

    语法格式

    create materialized view view_name
    [build immediate  |  build deferred ]
    refresh [fast|complete|force]
    [
    on  [commit  |  demand ]  |  start  with  (start_time)  next
    (next_time)
    ]
    as
    subquery

    • materialized view

      • 物化视图

    • build immediate(默认)

      • 创建视图后 立马生成数据

    • build deferred

      • 创建视图后 等待刷新生成数据

    • refresh : 数据刷新

      • fast : 增量更新

      • complete : 全量更新

      • force (默认方式)

        • 尝试使用fast更新

        • 再去使用全量更新

      • on (确定更新时机)

        • commit : 基表只要commit就会开始更新

        • demand : 手动方式(刷新) (默认的)

    物化视图的增量更新

    增量更新语法

    • 增量更新的物化视图

      • 创建基表的物化视图日志

      • 产生物化视图的 sql 必须包含rowid

    创建日志

    创建日志
    create materialized view log on T_ADDRESS with rowid;
    物化视图的sql必须包含rowid
    select
            T_ADDRESS.ROWID as addr_rowid,
            T_AREA.ROWID as area_rowid,
            T_ADDRESS.ID, T_ADDRESS.NAME, T_AREA.NAME area
    from T_ADDRESS
    inner join T_AREA on T_ADDRESS.AREAID = T_AREA.ID;

    4-序列

    什么是序列

    • 一个可以产生 唯一数字

      • 设置起始位置

      • 设置增长数量

      • 最大值

      • 最小值

      • 循环

    序列语法格式

    CREATE SEQUENCE sequence  //创建序列名称

    [INCREMENT BY n]  //递增的序列值是 n 如果 n 是正数就递增,如果是负数就递减 默认是 1

    [START WITH n]     //开始的值,递增默认是 minvalue 递减是 maxvalue

    [{MAXVALUE n | NOMAXVALUE}] //最大值
    [{MINVALUE n | NOMINVALUE}] //最小值

    [{CYCLE | NOCYCLE}] //CYCLE和NOCYCLE 表示当序列的值达到限制值后是否循环。CYCLE代表循环即到达例如最大值后重新从最小值开始

    [{CACHE n | NOCACHE}];//定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。

    注意点

    • 起始值是不能小于最小值的

    • 如果没有循环 能取到值 是不能超过最大值的

    • 如果有循环 起始从最小值开始

    • cache默认是为20的 循环值是要大于这个值的

    5-同义词

    • 对象的别名

      • 对象 : 表 序列 视图

    • 作用

      • 私有

        • 只能是创建这个同义词的用户使用

      • 共有

        • 所有的用户都可以使用

      • 给对象起别名 设置为公共的

        • 所有人都可以用这个同义词 所有人都不知道原始表名 表的用户

    语法格式
     

    create [public] SYNONYM synooym for object;

    • 不加public就是私有的

    • 加public就是共有的

  • 相关阅读:
    第100+1步 ChatGPT文献复现:ARIMAX预测肺结核 vol. 1
    2.1、如何在FlinkSQL中读取&写出到Kafka
    安卓10添加修改serial串口的服务
    Python编程语言学习:shap.force_plot函数的源码解读之详细攻略
    Windows安装Nginx及部署vue前端项目操作
    Unity中使用自定义mesh和UImesh
    Activity之间数据回传【Android、activity回传、结合实例】
    python装饰器原理梳理
    【文章学习系列之模型】Koopa
    内核中的互斥锁的使用
  • 原文地址:https://blog.csdn.net/m0_62008384/article/details/138045309