Chinaunix首页 | 论坛 | 博客
  • 博客访问: 24372
  • 博文数量: 11
  • 博客积分: 240
  • 博客等级: 二等列兵
  • 技术积分: 135
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-19 14:18
文章分类
文章存档

2011年(11)

我的朋友

分类: Oracle

2011-04-20 14:10:00

oracle11g for 007 sql第12章 other database objects

序列、索引、同义词

第一节:序列(sequence)

1.序列是用来创建主键的

创建序列的语法:

CREATE SEQUENCE INCREMENT BY
                START WITH
                integer
        MAXVALUE integer
        NOMAXVALUE
        MINVALUE integer
        NOMINVALUE
        CYCLE
        NOCYCLE
        CACHE integer
        NOCACHE
        ORDER
        NOORDER;

我们来创建一个序列:

create sequence strom1             -----创建一个序列名
INCREMENT BY 1             -----递增的值
START WITH 1               -----开始的值
MAXVALUE 9999              -----限制最大的值
NOCACHE                 -----不放在内存中
NOORDER;                -----不在循环
                 
SQL> select strom1.nextval from dual;

   NEXTVAL
----------
         1

SQL> select strom1.nextval from dual;

   NEXTVAL
----------
         2
        
注意:以上是一次递增加1;

netxtval and currval 是两个伪列是:当前值和下一个值意思。

SQL> create table testtable1 (id int);
表已创建。

SQL> insert into testtable1 values (strom1.currval);    ----strom1.currval 是当前值(前面我们已经在伪列中取到2,所以这个当前值是2);

已创建 1 行。

SQL> select * from testtable1;

        ID
----------
         2
SQL> insert into testtable1 values (strom1.nextval);    ----这个是取下一个值;

已创建 1 行。


我们这里把他回滚掉
SQL> rollback;                   ----对维表里填的值是可以回滚的,但在引用的值是不能回滚的。

回退已完成。


2.我们可以不可以修改sequence(序列)呢? 是可以的 但有些的是不能修改的。

我们来修改 sequence 值,例子:

SQL> alter sequence strom1
  2  start with 10;
start with 10
*
第 2 行出现错误:
ORA-02283: cannot alter starting sequence number

上面告诉我们,开始序列是不能修改的。

我们来修改别的值看看例子:

SQL> alter sequence strom1
  2  increment by 10;

序列已更改。

以上是修改 递增的值,递增的值是可以修改的;注意:如果之前的修改的序列值已经改了就不会改变,后续改的值只能从后续的值开始算起。

3.删除 drop sqeuence

drop sqeuence strom1

第2节 index 使用

Ⅰ.索引是可以分配空间的,是独立储存在物理路径和结构最终指向基表的数据(是独立的对象方便查询)而且
   可以减少I/0的数据的使用率,索引分为自动创建和手动创建。

我们来举例说明一下:例子

SQL> create table test as select * from employees;      
 
Table created
 
SQL> create index testindex1
  2  on test(last_name);
 
Index created

索引是方便查询但索引会引起数据改变的负担,数据改变索引也要同时发生改变,索引的唯一性是很高的,
索引在where and join 里面才会启作用。索引是最高效的访问的值是当前 2%-4%。如果访问的结果级在20%
以上的话索引的效率会持续下降。

where not to create an index (什么地方不要创建索引)

1.the table is smail     ---(在表很小的情况下不创建)

2.where            ---(不经常用的where子句里面不创建)

3.在你的表经常改变的情况下也不创建。

注意:有两个数据字典视图user_indexes 和 user_ind_columus 可以看到索引的状态。

Ⅱ.function_basend indexes         ---基于函数的索引

create table test (a number , b varchar(20));

create index testindex1 on test (upper(b));

insert into test values( 2,'aaa');

select * from test where upper(b) like 'A%';

Ⅲ.removing an index (删除一个索引)

drop index testindex1

第3节 synonyms(同义词) 分为公用和私有

简化对数据的访问,有两种不同的用途:

1.更容易参照用户所拥有的数据对象
2.可以缩短数据对象的名字

下面我举个例子说明:

conn /as sysdba          ----首先用sysdba用户登入

create public synonyms emp for scott.emp;

SQL> select * from emp;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7369 SMITH      CLERK      7902 1980/12/17     800.00               20
 7499 ALLEN      SALESMAN   7698 1981/2/20     1600.00    300.00     30
 7521 WARD       SALESMAN   7698 1981/2/22     1250.00    500.00     30
 7566 JONES      MANAGER    7839 1981/4/2      2975.00               20
 7654 MARTIN     SALESMAN   7698 1981/9/28     1250.00   1400.00     30
 7698 BLAKE      MANAGER    7839 1981/5/1      2850.00               30
 7782 CLARK      MANAGER    7839 1981/6/9      2450.00               10
 7788 SCOTT      ANALYST    7566 1987/4/19     3000.00               20
 7839 KING       PRESIDENT       1981/11/17    5000.00               10
 7844 TURNER     SALESMAN   7698 1981/9/8      1500.00      0.00     30
 7876 ADAMS      CLERK      7788 1987/5/23     1100.00               20
 7900 JAMES      CLERK      7698 1981/12/3      950.00               30
 7902 FORD       ANALYST    7566 1981/12/3     3000.00               20
 7934 MILLER     CLERK      7782 1982/1/23     1300.00               10

14 rows selected

以上就是同义词的用法,注意:如果要在普通用使用同义词查询另一张表的数据时要用sysdba给这张表
授权。

阅读(990) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~