Oracle数据库中序列、索引、视图

1,185 阅读2分钟

Oracle中序列、索引、视图

1、序列

我们在mysql中要生成自增的id,必须使用auto_increment关键字,但是Oracle中不支持此自增关键字、只能使用序列来生成一系列自增(减)的整数值。

  • 首先我们在PLSQL可视化工具对某个表来创建序列Sequences

  • 使用Sequences

    • 序列号名.nextval 查询序列下一个自增id

    • 序列号名.nextval 查询序列下一个自增id

    • -- 序列号名.currval 查询序列当前自增id

    • drop sequence 序列号名 (删除序列号)

      select * from emp2;
      create table emp2 as select * from emp
      insert into emp2 values(sq_emp.nextval,sysdate)
      select sq_emp.currval from emp2
      

2、索引

索引:为了提高查询效率添加的列

  • 添加索引的意义:

当我们oracle中没有使用索引查询数据时,会在大表中根据每个数据区(行)遍历所有的列信息,查询到数据后会记录rowid(物理地址),查询效率低下,那么这时候就要添加索引,索引相当于给主表添加了个子表,记录索引列和rowid(物理地址列),根据索引列查询到rowid,直接映射到大表的数据区,查询区内的所有列信息

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BBN1A32u-1596544053514)(upload\image-20200804181645359.png)]

  • 添加索引

    -- 添加唯一索引
    create unique index ind_emp_ename on emp(ename);
    -- 添加普通索引
    create index ind_emp_ename on emp(ename);
    
  • 删除索引

    drop index ind_emp_ename;
    
  • 修改索引

    -- 修改索引
    alter table emp add constraint uq_ename unique(ename);
    

    3、视图

    • 本质:不含物理数据;仅仅包含一条查询的sql; 对视图的查询就是对视图上捆绑的sql进行嵌套查询;

    • 优点: 可以使用视图进行某些物理数据隐藏

      ​ 对数据提前做输出整理(整理到一个sql查询中)

      --创建视图
        create or replace view v_emp_dept as 
               select e.empno,e.ename,e.job,e.deptno,d.dname,d.loc
               from emp e, dept d
               where e.deptno = d.deptno;
      
      • 视图的分类: 简单视图: 数据来自一张表,并且没有数据变形(数据变形:通过 group by分组后的数据就是数据变形)

        ​ 可以根据视图的数据对应到物理的数据区

      ​ **复杂视图:**数据来自多张表;或者有数据变形;

      ​ 不能通过视图数据对应到物理数据区

      复杂视图示例代码: 对复杂sql执行查询操作,后续查询时只需嵌套查询视图名即可

       create view v_deptsal as select deptno, sum(sal) sum_sal from emp group by deptno;
      
       select * from v_deptsal;
      

    -- 视图的意义: 优化查询; 所以视图没有特殊要求的时候只用来查询;