• Oracle -- 视图与序列


    视图定义

    是从一个或者多个数据表中导出的虚表(虚拟表),视图所对应的数据并不真正的存储在数据库中,比如将一个查询的结果定义为视图,则直接查询视图即可

    优点:

    (1)简化数据的操作:视图可以简化用户处理数据的方式

    (2)着重与特定数据:不必要的数据或敏感数据可以不出现在视图中

    (3)安全机制,不同的用户对数据访问权限不一样

    (4)提供向后监控性,表改变,视图可以不变

    视图操作

    特点:

    (1)视图不会实际存储,当视图允许修改时,修改视图中的数据,则表中的数据也被修改

    (2)只读视图不允许修改数据

    (3)带约束的视图

    (4)多表关联也可以修改数据,基表的数据会跟随修改

    1. create VIEW classstudent AS SELECT * FROM TBL_STUDENTS
    2. // or replace是视图存在时,替换成新的,with check option是带检查约束的视图
    3. create OR REPLACE VIEW classstudent AS SELECT * FROM TBL_STUDENTS WITH CHECK OPTION
    4. // 创建只读视图
    5. create OR REPLACE VIEW classstudent AS SELECT * FROM TBL_STUDENTS WITH READ ONLY
    6. // 强制视图,即表不存在时创建的视图,用于动态生成表的场景
    7. CREATE force VIEW view_test as SELECT * from tbl_test

    1. // 复杂视图 多表查询,允许修改数据,会键保留表
    2. CREATE VIEW view_student_class AS
    3. SELECT * FROM TBL_STUDENTS JOIN TBL_CLASSES ON TBL_STUDENTS.STU_CID = TBL_CLASSES.CLASS_ID
    4. // 聚合视图,聚合函数必须有列名
    5. CREATE VIEW view_student as
    6. SELECT COUNT(*) as count,STU_AGE as age FROM TBL_STUDENTS GROUP BY STU_AGE

    注:

    (1)键保留表,对于可更新的视图,在视图中的行和基表中的行之间必须具有一对一的关系,因为这样才能够反向映射到原基础表

    (2)聚合函数做视图必须有列名

    (3)聚合函数的视图无法修改

    物化视图

    物化视图是将查询的结果建立副本,占用存储空间,查询效率会高,但是会占用空间,未解决权限问题,后续学习。

    更新方式:

                    COMPLETE 完全更新

                    FAST 增量更新,根据基表的更新日志,判断视图是否需要更新

                    ON COMMIT是在基表变化时刷新物化视图

                    ON COMMON是手动刷新

                    BUILD IMMEDIATE 创建视图时生成数据

    ORA-01031: insufficient privileges

    序列

    创建一系列数字,mysql的主键自增是直接写的,oracle是需要创建序列的

    1. --创建简单序列
    2. CREATE sequence seq1;
    3. --查询序列的下一个值,执行一次递增一个
    4. SELECT seq1.NEXTval from dual;
    5. --查询序列的当前值
    6. select seq1.currval from dual;

    1. CREATE sequence seq_withMax
    2. maxvalue 20; --创建带有最大值的
    3. SELECT seq_withMax.nextval FROM dual; -- 从一开始,每次递增1,最大到20
    4. -- 跳跃的序列
    5. CREATE sequence seq3
    6. INCREMENT BY 2 -- 默认是1
    7. START WITH 1000 --递增默认是MaxValue,递减是minvalue
    8. maxvalue 1002
    9. minvalue 100
    10. cycle --是否循环 nocycle
    11. cache 10; -- 每次放到内存中10个值,默认使用cache 20,不使用cache时配置为nocache,磁盘中保存到10了,缓存到20了,此时重启服务会从21开始,造成断号,有缓存必须小于一次的循环,即cache默认20*INCREMENT by = 200个,得比cache是10,小于200
    12. select seq3.nextval from dual; -- 从1000开始,每次递增2,到1002后,重新从100开始
    13. CREATE sequence seq4
    14. INCREMENT BY -2
    15. START WITH 1000
    16. maxvalue 1001;
    17. SELECT seq4.nextval FROM dual; -- 从1000开始,每次递减2

    alter sequenct可以修改序列,不能修改start with

  • 相关阅读:
    C语言:用函数删除字符串里面的空格
    【Python编程】二、基本语法
    12 带音视频、多媒体、2D3D显示加速的嵌入式类芯片介绍
    论文管理系统(增删查改功能的实现)
    Android 查看当前手机、APP的ABI架构信息
    05-01 jdk,tomcat,mariadb数据库和profile多环境
    docker容器
    华为奔赴“空间智能”,全屋智能的逻辑变了吗?
    企业级磁盘阵列存储系统由硬到软全析
    服务发现问题
  • 原文地址:https://blog.csdn.net/qq_45759288/article/details/125584852