第十六章序列、索引、同义词课堂笔记和练习

– 序列:通常用来生成主键值,可以自增或自减

  • 创建序列

    --  简单创建
        create sequence emp_seq;
    
    --  复杂创建
    --  指定所有属性值创建
        create sequence emp_seq
               start with 1 --从1开始取值
               increment by 1 --每次增加1
               minvalue 1 --最小值1
               maxvalue 9999999999 --最大值9999999999
               nocycle --不要循环
               cache 20; --缓存20个值
    
    
    
    --  currval 和 nextval 伪列
        select emp_seq.nextval from dual;--必须先使用nextval,在执行currval
        select emp_seq.currval from dual;
    
  • 使用序列

    select * from emp;
    insert into  emp(empno) values (emp_seq.nextval);    
    
  • 修改序列

    --  除start with不能更改,其他都能更改
    alter sequence emp_seq
          increment by 2
          minvalue 5--不能大于于当前值
          maxvalue 10;--不能小于当前值
    
  • rowid 应用

    了解    
    
  • 删除序列

    drop sequence emp_seq;
    

– 索引:通常用来优化查询速度

  • 创建索引

    --  自动创建
    
    --  手动创建
    --  单列索引
        create index emp_ename_index on emp(ename);
    
    --  复合索引
        create index emp_deptno_job_index on emp(deptno,job);
    
  • 测试索引

    1.创建表emp_bak,复制emp表结构,以及所有的数据
    create table emp_bak as select * from emp; 
    
    2.批量新增数据到emp_bak表中(单位:百万)
    insert into emp_bak select * from emp_bak;     --多次重复执行,目前3670016
    
    3.将empno列的数据更新为唯一值
    update emp_bak set empno = rownum;             --第一种方式
    update emp_bak set empno = emp_seq.nextval;    --第二种方式
    
    alter table emp_bak modify(empno number(10));
    --原empno长度为4,精度不够,修改为长度10
    
    
    4.测试效率--(可借助F5(explain plan window)窗口分析SQL语句执行效率)
    select * from emp_bak where empno=3000000;     --无索引  0.12左右
    create index emp_empno_index on emp_bak(empno);--创建empno列的索引
    select * from emp_bak where empno=3000000;     --有索引  0.015左右
    
  • 删除索引
    drop index emp_empno_index;

–数据字典

select * from user_tables; -- 查询表

select * from user_constraints;--查询约束
select * from user_cons_columns; --查询约束及相关列

select * from user_indexes;--查询当前用户所有的索引
select * from user_ind_columns;--查询当前用户的所有索引,及相关列

–同义词

  • 创建同义词

    --创建同义词(private私有同义词:属于当前用户scott)
    create synonym e for emp;--相当于给emp表取别名
    --权限不足,sys授权
    grant create synonym to scott;
    --测试
    select * from scott.emp;
    select * from scott.e;
    
    --创建同义词(public公有同义词:属于共有用户,不属于某一指定用户)
    create public synonym a for emp;
    --权限不足,sys授权
    grant create public synonym to scott;
    
  • 测试

    select * from a;
    
  • 删除同义词

    drop synonym e;
    

猜你喜欢

转载自blog.csdn.net/bb_code_exchange/article/details/81365873