• Oracle第八课


    Oracle第八课

    一、序列(sequence)

    1. 创建序列

      -- 创建一个默认序列
      create sequence seq1;
      -- 创建一个特别定制的序列
      create sequence SEQ1
      minvalue 1 -- 最小值
      maxvalue 9999999999999999999999999999 -- 最大值
      start with 1 -- 开始值
      increment by 1 -- 步长
      cache 20; -- 缓存
      -- 将序列改为循环使用
      ALTER SEQUENCE seq1 CYCLE;
      -- 缓存的最大值公式:(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)
    2. 序列的两个属性

      -- 序列的下一个值
      SELECT seq1.nextval FROM dual;
      -- 当前序列的值
      SELECT seq1.currval FROM dual;
    3. 删除序列

      drop sequence seq1;
    4. 序列的应用

      -- 插入数据时
      INSERT INTO t_emp2(ID,NAME) VALUES(seq1.nextval,'name'||seq1.currval);

    二、视图

    • 定义

      1. 视图是虚表,不是真实存在的表和数据
      2. 物理存在(真实存在),逻辑存在(不是真实的,抽象的)
      3. 视图的关键字:view
      4. 它在数据库以SQL的形式存在,一个视图其实是一个SQL语句的存储,这个SQL语句的名称就是视图的名称
      5. vw_emp一般vw是视图的前缀,vw_emp是一个SQL的存储。v_emp也可以,但是一些变量也以v_开头
    • 优点:把SQL存储起来,运行方便.

      可以有效的保护数据,对权限加以控制

    • 视图是依赖一些表的,而这些表不能给程序员开放,不能访问,如果直接访问是不可以的,但是DBA可以建一个视图,给程序员开放视图的权限,这样就可以间接来访问受限的表。视图只能查询,不能修改;这样就避免的误修改数据的风险。(敏感表名程序员可能是未知,就算知道,因为权限问题无法访问),在列或字段上做纵向的保护

      假设表中有1w条数据,因为数据的敏感性,用视图只显示其中若干条记录,这样的情况是列都显示,但是在行上有限制。

      一个视图背后是由若干张表组成的SQL,这个SQL是很复杂的,对程序员开放不合理,建上视图后,只要一个简单的视图名称就可以方便访问。

      构成视图的SQL中涉及的表是视图的基表。

    • 视图的创建

      • 简单视图(可以往里面插入数据)

        create or replace view v_emp as select * from emp;
      • 复杂视图,多表

        CREATE OR REPLACE VIEW v_emp_dept AS SELECT empno,dname FROM emp e, dept d WHERE e.deptno=d.deptno;
        -- 查看视图
        SELECT * FROM v_emp_dept;
      • force:不存在或无权限也能创建视图

        -- 创建视图
        CREATE OR REPLACE FORCE VIEW v_force AS SELECT * FROM sunwukong;
        CREATE OR REPLACE FORCE VIEW v_t1 AS SELECT * FROM user22.t1;
        -- 分配权限,能够查看此视图
        grant select on t1 to scott;
        -- 查看视图
        SELECT * FROM v_force;
        SELECT * FROM v_t1;
        -- 收回权限
        revoke select on t1 from scott;
      • with check option插入时检查是否符合条件

        -- 创建带约束的视图
        CREATE OR REPLACE FORCE VIEW v_test AS
        SELECT * FROM emp WHERE empno>7788
        WITH CHECK OPTION;
        -- 测试数据
        INSERT INTO v_test(empno) VALUES(7788);
      • with read only 只能查看视图

        CREATE OR REPLACE FORCE VIEW v_test AS 
        SELECT * FROM emp
        WITH READ ONLY;
    • 物化视图:有数据,数据可能是加工过的,可能来自多个表,也可能是某表中的一部分

      数据来源于不同表或单表,经过横向或纵向处理,是一个视图窗口。

      原因:普通视图在执行SQL时要消耗性能,因为他们是一个SQL,物化视图执行时只查询自己的数据(不再进行计算)

      分类:ON DEMAND 、ON COMMIT

      在需要时(在查询视图时)再从基表中更新数据到物化同步(物化视图的同步)

      在更新视图的同时,同步物化视图,物化视图始终是最新的。(维护数据效率低)

    • SQL优化:索引和物化视图

    三、规范

    • 关键字总大写,列名和表名小写

    四、应用

    • 查询出每门课都大于80分的学生姓名

      SELECT * FROM t_score WHERE NAME NOT IN(
      (SELECT DISTINCT NAME FROM t_score WHERE score<90));
    • 学生表 如下:

      自动编号 学号 姓名 课程编号 课程名称 分数

      1 2005001 张三 0001 数学 69 2 2005002 李四 0001 数学 89 3 2005001 张三 0001 数学 69

      删除除了自动编号不同, 其他都相同的学生冗余信息

    五、作业

    • 一个家庭有父亲,母亲,儿子(若干),女儿(若干),要求找出家庭中所有的孩子都考上大学的家庭,并显示出父亲,母亲的姓名



    软件下载提取码:qwer
  • 相关阅读:
    Web前端面试(二):CSS盒模型
    Web前端面试题
    微信小程序之base64图片如何预览与一键保存到本地相册?
    微信小程序 —搜索框
    初次
    用document.getElementsByTagName()返回的真的是数组吗?
    《精通CSS:高级Web标准解决方案》学习笔记(下)
    Git常用命令
    博客施工暂时告一段落
    《精通CSS:高级Web标准解决方案》学习笔记(上)
  • 原文地址:https://www.cnblogs.com/ty0910/p/14312606.html
Copyright © 2020-2023  润新知