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

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

    --  简单创建
        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;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值