zoukankan      html  css  js  c++  java
  • 08-其它数据库对象

    序列: 可供多个用户用来产生唯一数值的数据库对象
         自动提供唯一的数值
              共享对象
             主要用于提供主键值
             将序列值装入内存可以提高访问效率

     1 --创建序列
     2 --创建序列 DEPT_DEPTID_SEQ为表 DEPARTMENTS 提供主键
     3 --不使用 CYCLE 选项
     4 CREATE SEQUENCE dept_deptid_seq
     5                 INCREMENT BY 10
     6                 START WITH 120
     7                 MAXVALUE 9999
     8                 NOCACHE
     9                 NOCYCLE;
    10 
    11 --查询序列
    12 --查询数据字典视图 USER_SEQUENCES 获取序列定义信息
    13 --如果指定NOCACHE 选项,则列LAST_NUMBER 显示序列中下一个有效的值
    14 SELECT    sequence_name, min_value, max_value, 
    15         increment_by, last_number
    16 FROM    user_sequences;
    17 
    18 --NEXTVAL 和 CURRVAL 伪列
    19 --NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用
    20 --CURRVAL 中存放序列的当前值 
    21 --NEXTVAL 应在 CURRVAL 之前指定 ,否则会报CURRVAL 尚未在此会话中定义的错误。
    22 
    23 --序列应用举例
    24 INSERT INTO departments(department_id, 
    25             department_name, location_id)
    26 VALUES      (dept_deptid_seq.NEXTVAL, 
    27             'Support', 2500);
    28 --序列 DEPT_DEPTID_SEQ 的当前值
    29 SELECT    dept_deptid_seq.CURRVAL
    30 FROM    dual;
    31 
    32 --使用序列
    33 --将序列值装入内存可提高访问效率
    34 --序列在下列情况下出现裂缝:
    35 --                    回滚
    36 --                    系统异常
    37 --                    多个表同时使用同一序列
    38 --如果不将序列的值装入内存(NOCACHE), 可使用表 USER_SEQUENCES 查看序列当前的有效值
    39 
    40 --修改序列
    41 --修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存
    42 ALTER SEQUENCE dept_deptid_seq
    43                INCREMENT BY 20
    44                MAXVALUE 999999
    45                NOCACHE
    46                NOCYCLE;
    47 
    48 --修改序列的注意事项
    49 --必须是序列的拥有者或对序列有 ALTER 权限
    50 --只有将来的序列值会被改变
    51 --改变序列的初始值只能通过删除序列之后重建序列的方法实现
    52 
    53 --删除序列
    54 --使用 DROP SEQUENCE 语句删除序列
    55 --删除之后,序列不能再次被引用
    56 DROP SEQUENCE dept_deptid_seq;

     

    索引:
      一种独立于表的模式对象, 可以存储在与表不同的磁盘或表空间中
      索引被删除或损坏, 不会对表产生影响, 其影响的只是查询的速度
      索引一旦建立, Oracle 管理系统会对其进行自动维护, 而且由 Oracle 管理系统决定何时使用索引。用户不用在查询语句中指定使用哪个索引
      在删除一个表时,所有基于该表的索引会自动被删除
      通过指针加速 Oracle 服务器的查询速度
      通过快速定位数据的方法,减少磁盘 I/O

    以下情况可以创建索引:
      列中数据值分布范围很广
      列经常在 WHERE 子句或连接条件中出现
      表经常被访问而且数据量很大 ,访问的数据大概占数据总量的2%到4%

    下列情况不要创建索引:
      表很小
      列不经常作为连接条件或出现在WHERE子句中
      查询的数据大于2%到4%
      表经常更新

     1 --创建索引
     2 --自动创建: 在定义 PRIMARY KEY 或 UNIQUE 约束后系统自动在相应的列上创建唯一性索引
     3 --手动创建: 用户可以在其它列上创建非唯一的索引,以加速查询
     4 --在一个或多个列上创建索引
     5 --在表 EMPLOYEES的列 LAST_NAME 上创建索引
     6 CREATE INDEX     emp_last_name_idx
     7 ON         employees(last_name);
     8 
     9 --索引不需要用,只是说我们在用name进行查询的时候,速度会更快。
    10 --当然查的速度快了,插入的速度就会慢。因为插入数据的同时,还需要维护一个索引。
    11 Desc emp;
    12 Create index name_index on emp(name);
    13 
    14 
    15 --查询索引
    16 --可以使用数据字典视图 USER_INDEXES 和 USER_IND_COLUMNS 查看索引的信息
    17 SELECT    ic.index_name, ic.column_name,
    18     ic.column_position col_pos,ix.uniqueness
    19 FROM    user_indexes ix, user_ind_columns ic
    20 WHERE    ic.index_name = ix.index_name
    21 AND    ic.table_name = 'EMPLOYEES';
    22 
    23 --删除索引
    24 --使用DROP INDEX 命令删除索引
    25 --删除索引UPPER_LAST_NAME_IDX
    26 --只有索引的拥有者或拥有DROP ANY INDEX 权限的用户才可以删除索引
    27 --删除操作是不可回滚的
    28 DROP INDEX upper_last_name_idx;

     

    同义词-synonym

     1 --方便访问其它用户的对象
     2 --缩短对象名字的长度
     3 CREATE SYNONYM e FOR employees;
     4 select * from e;
     5 
     6 --创建和删除同义词
     7 --为视图DEPT_SUM_VU 创建同义词
     8 CREATE SYNONYM  d_sum
     9 FOR  dept_sum_vu;
    10 
    11 --删除同义词
    12 DROP SYNONYM d_sum;

     

    eg:

     1 --创建表
     2 create table dept as 
     3 select department_id id,department_name name 
     4 from departments
     5 where 1=2;
     6 
     7 --创建序列dept_id_seq,开始值为200,每次增长10,最大值为10000
     8 create sequence dept_id_seq
     9 start with 200
    10 increment by 10
    11 maxvalue 10000;
    12 
    13 --使用序列向表dept中插入数据
    14 insert into dept01
    15 values(dept_id_seq.nextval,'Account')
  • 相关阅读:
    什么是Referer?Referer的作用?空Referer是怎么回事?
    http状态码301和302详解及区别——辛酸的探索之路
    linux下redis的安装、启动、关闭和卸载
    Ubuntu下的redis安装过程
    apt-get build-dep命令详解
    apt 和 apt-get的区别
    Cortex-M3 入门指南(三):时钟总线与复位时钟控制器
    objdump命令解析
    ubuntu gcc 安装 使用
    你知道 GNU Binutils 吗?【binutils】
  • 原文地址:https://www.cnblogs.com/shici/p/13443512.html
Copyright © 2011-2022 走看看