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给这张表 授权。
|