`
zhuxinzx
  • 浏览: 293813 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

oracle 数据库模式对象,索引,序列,同义词,查看用户拥有的表,聚簇,数据库链接

阅读更多
数据库模式对象:

Sql代码
1.TABLE   表   用于存储数据的基本结构  
2.VIEW    视图  以不同的侧面反映表的数据,是一种逻辑上的表  
3.INDEX   索引  加快表的查询速度  
4.CLUSTER 聚簇  将不同表的字段并用的一种特殊结构的表集合  
5.SEQUENCE    序列  生成数字序列,用于在插入时自动填充表的字段  
6.SYNONYM 同义词 为简化和便于记忆,给对象起的别名  
7.DATABASE LINK   数据库链接   为访问远程对象创建的通道  
8.STORED PROCEDURE、FUNCTION   存储过程和函数 存储于数据库中的可调用的程序和函数  
9.PACKAGE、PACKAGE BODY    包和包体    将存储过程、函数及变量按功能和类别进行捆绑  
10.TRIGGER 触发器 由DML操作或数据库事件触发的事件处理程序 
TABLE 表 用于存储数据的基本结构
VIEW 视图 以不同的侧面反映表的数据,是一种逻辑上的表
INDEX 索引 加快表的查询速度
CLUSTER 聚簇 将不同表的字段并用的一种特殊结构的表集合
SEQUENCE 序列 生成数字序列,用于在插入时自动填充表的字段
SYNONYM 同义词 为简化和便于记忆,给对象起的别名
DATABASE LINK 数据库链接 为访问远程对象创建的通道
STORED PROCEDURE、FUNCTION 存储过程和函数 存储于数据库中的可调用的程序和函数
PACKAGE、PACKAGE BODY 包和包体 将存储过程、函数及变量按功能和类别进行捆绑
TRIGGER 触发器 由DML操作或数据库事件触发的事件处理程序


Oracle数据库的索引
索引(INDEX)是为了加快数据的查找而创建的数据库对象,特别是对大表,索引可以有效地提高查找速度,也可以保证数据的惟一性。索引是由Oracle自动使用和维护的,一旦创建成功,用户不必对索引进行直接的操作。索引是独立于表的数据库结构,即表和索引是分开存放的,当删除索引时,对拥有索引的表的数据没有影响。
在创建PRIMARY KEY和UNIQUE约束条件时,系统将自动为相应的列创建惟一(UNIQUE)索引。索引的名字同约束的名字一致。
索引有两种:B*树索引和位图(BITMAP)索引。
B*树索引是通常使用的索引,也是默认的索引类型。在这里主要讨论B*树索引。B*树是一种平衡2叉树,左右的查找路径一样。这种方法保证了对表的任何值的查找时间都相同。
B*树索引可分为:惟一索引、非惟一索引、一列简单索引和多列复合索引。
创建索引一般要掌握以下原则:只有较大的表才有必要建立索引,表的记录应该大于50条,查询数据小于总行数的2%~4%。虽然可以为表创建多个索引,但是无助于查询的索引不但不会提高效率,还会增加系统开销。因为当执行DML操作时,索引也要跟着更新,这时索引可能会降低系统的性能。一般在主键列或经常出现在WHERE子句或连接条件中的列建立索引,该列称为索引关键字。
索引的创建
创建索引不需要特定的系统权限。建立索引的语法如下:
CREATE [{UNIQUE|BITMAP}] INDEX 索引名 ON 表名(列名1[,列名2,...]);
其中:
UNIQUE代表创建惟一索引,不指明为创建非惟一索引。
BITMAP 代表创建位图索引,如果不指明该参数,则创建B*树索引。
列名是创建索引的关键字列,可以是一列或多列。
删除索引的语法是:
DROP INDEX 索引名;
删除索引的人应该是索引的创建者或拥有DROP ANY INDEX系统权限的用户。索引的删除对表没有影响。
创建和删除索引。
步骤1:创建索引:

Sql代码
1.CREATE INDEX EMP_ENAME ON EMP(ENAME); 
CREATE INDEX EMP_ENAME ON EMP(ENAME);
执行结果:
索引已创建。
步骤2:查询中引用索引:

Sql代码
1.SELECT ENAME,JOB,SAL FROM EMP WHERE ENAME='SCOTT'; 
SELECT ENAME,JOB,SAL FROM EMP WHERE ENAME='SCOTT';
执行结果:

Sql代码
1.ENAME      JOB              SAL  
2.        ------------ ------------------- --------------------  
3.        SCOTT      ANALYST         3000 
ENAME      JOB              SAL
------------ ------------------- --------------------
SCOTT      ANALYST         3000
步骤3:删除索引:

Sql代码
1.DROP INDEX EMP_ENAME; 
DROP INDEX EMP_ENAME;
执行结果:
索引已丢弃。
说明:本例创建的是B*树非惟一简单索引。索引关键字列是ENAME。在步骤2中,因为WHERE条件中出现了索引关键字,所以查询中索引会被自动引用,但是由于行数很少,因此不会感觉到查询速度的差别。
创建复合索引。
步骤1:创建复合索引:

Sql代码
1.CREATE INDEX EMP_JOBSAL ON EMP(JOB,SAL); 
CREATE INDEX EMP_JOBSAL ON EMP(JOB,SAL);
执行结果:
索引已创建。
步骤2:查询中引用索引:

Sql代码
1.SELECT ENAME,JOB,SAL FROM EMP WHERE JOB='MANAGER'AND SAL>2500; 
SELECT ENAME,JOB,SAL FROM EMP WHERE JOB='MANAGER'AND SAL>2500;
执行结果:

Sql代码
1.ENAME      JOB               SAL  
2.        -------------- --------------------- -----------------  
3.        BLAKE      MANAGER         2850  
4.        CLARK      MANAGER         2850  
5.        JONES      MANAGER         2975 
ENAME      JOB               SAL
-------------- --------------------- -----------------
BLAKE      MANAGER         2850
CLARK      MANAGER         2850
JONES      MANAGER         2975
说明:在本例中创建的是包含两列的复合索引。JOB是主键,SAL是次键。WHERE条件中引用了JOB和SAL,而且是按照索引关键字出现的顺序引用的,所以在查询中,索引会被引用。
如下的查询也会引用索引:

Sql代码
1.SELECT ENAME,JOB,SAL FROM EMP WHERE JOB='CLERK'; 
SELECT ENAME,JOB,SAL FROM EMP WHERE JOB='CLERK';
但以下查询不会引用索引,因为没有先引用索引关键字的主键:

Sql代码
1.SELECT ENAME,JOB,SAL FROM EMP WHERE SAL>2500; 
SELECT ENAME,JOB,SAL FROM EMP WHERE SAL>2500;

查看索引
通过查询数据字典USER_INDEXES可以检查创建的索引。
通过查询数据字典USER_IND_COLUMNS可以检查索引的列。
显示emp表的索引:

Sql代码
1.SELECT INDEX_NAME, INDEX_TYPE, UNIQUENESS FROM USER_INDEXES WHERE TABLE_NAME='EMP'; 
SELECT INDEX_NAME, INDEX_TYPE, UNIQUENESS FROM USER_INDEXES WHERE TABLE_NAME='EMP';
执行结果:

Sql代码
1.INDEX_NAME                            
2.        -------------------------------------- ---------------------------------------- -----------------------------------  
3.        EMP_JOBSAL     NORMAL         NONUNIQUE  
4.        PK_EMP    NORMAL                      UNIQUE 
INDEX_NAME                    
-------------------------------------- ---------------------------------------- -----------------------------------
EMP_JOBSAL     NORMAL         NONUNIQUE
PK_EMP    NORMAL                      UNIQUE
说明:由本训练可见,emp表共有两个索引,其中EMP_JOBSAL是刚刚创建的,属于非惟一索引。PK_EMP为生成主键时系统创建的索引,属于惟一索引。
显示索引的列。

Sql代码
1.SELECT COLUMN_NAME FROM USER_IND_COLUMNS   
2.        WHERE  INDEX_NAME='EMP_JOBSAL'; 
SELECT COLUMN_NAME FROM USER_IND_COLUMNS
WHERE  INDEX_NAME='EMP_JOBSAL';
执行结果:

Sql代码
1.COLUMN_NAME  
2.        --------------------------------------------------------------------------------  
3.        JOB  
4.        SAL 
COLUMN_NAME
--------------------------------------------------------------------------------
JOB
SAL
说明:该查询显示出索引“EMP_JOBSAL”拥有两列:JOB和SAL。

序列的创建
序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。其主要的用途是生成表的主键值,可以在插入语句中引用,也可以通过查询检查当前值,或使序列增至下一个值。
创建序列需要CREATE SEQUENCE系统权限。序列的创建语法如下:
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n|NOMAXVALUE}]
[{MINVALUE n|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];
其中:
INCREMENT BY 用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表序列的值是按照此步长递减的。
START WITH 定义序列的初始值(即产生的第一个值),默认为1。
MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。
MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。
CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。
删除序列的语法是:
DROP SEQUENCE 序列名;
删除序列的人应该是序列的创建者或拥有DROP ANY SEQUENCE系统权限的用户。序列一旦删除就不能被引用了。
序列的某些部分也可以在使用中进行修改,但不能修改SATRT WITH选项。对序列的修改只影响随后产生的序号,已经产生的序号不变。修改序列的语法如下:
ALTER SEQUENCE 序列名
[INCREMENT BY n]
[{MAXVALUE n|NOMAXVALUE}]
[{MINVALUE n|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];
创建和删除序列。
步骤1:创建序列:

Sql代码
1.CREATE SEQUENCE ABC INCREMENT BY 1 START WITH 10 MAXVALUE 9999999 NOCYCLE NOCACHE; 
CREATE SEQUENCE ABC INCREMENT BY 1 START WITH 10 MAXVALUE 9999999 NOCYCLE NOCACHE;
执行结果:
序列已创建。
步骤2:删除序列:

Sql代码
1.DROP SEQUENCE ABC; 
DROP SEQUENCE ABC;
执行结果:
序列已丢弃。
说明:以上创建的序列名为ABC,是递增序列,增量为1,初始值为10。该序列不循环,不使用内存。没有定义最小值,默认最小值为1,最大值为9 999 999。
序列的使用
如果已经创建了序列,怎样才能引用序列呢?方法是使用CURRVAL和NEXTVAL来引用序列的值。
调用NEXTVAL将生成序列中的下一个序列号,调用时要指出序列名,即用以下方式调用:
序列名.NEXTVAL
CURRVAL用于产生序列的当前值,无论调用多少次都不会产生序列的下一个值。如果序列还没有通过调用NEXTVAL产生过序列的下一个值,先引用CURRVAL没有意义。调用CURRVAL的方法同上,要指出序列名,即用以下方式调用:
序列名.CURRVAL.
产生序列的值。
步骤1:产生序列的第一个值:

Sql代码
1.SELECT ABC.NEXTVAL FROM DUAL; 
SELECT ABC.NEXTVAL FROM DUAL;
执行结果:
 
Sql代码
1.NEXTVAL  
2.    ------------------  
3.             10 
NEXTVAL
------------------
       10
步骤2:产生序列的下一个值:

Sql代码
1.SELECT ABC.NEXTVAL FROM DUAL; 
SELECT ABC.NEXTVAL FROM DUAL;
执行结果:
 
Sql代码
1.NEXTVAL  
2.        -------------------   
3.             11 
NEXTVAL
-------------------
       11
步骤3:产生序列的当前值:

Sql代码
1.SELECT ABC.CURRVAL FROM DUAL; 
SELECT ABC.CURRVAL FROM DUAL;
执行结果:
 
Sql代码
1.CURRVAL  
2.    --------------------  
3.            11  
CURRVAL
--------------------
        11
说明:第一次调用NEXTVAL产生序列的初始值,根据定义知道初始值为10。第二次调用产生11,因为序列的步长为1。调用CURRVAL,显示当前值11,不产生新值。
序列的应用:产生图书序列号。
步骤1:创建序列:

Sql代码
1.CREATE SEQUENCE BOOKID INCREMENT BY 1 START WITH 10 MAXVALUE 9999999 NOCYCLE NOCACHE; 
CREATE SEQUENCE BOOKID INCREMENT BY 1 START WITH 10 MAXVALUE 9999999 NOCYCLE NOCACHE;
执行结果:
序列已创建。
步骤2:使用序列生成新的图书编号:

Sql代码
1.INSERT INTO 图书 VALUES('A'||TO_CHAR(BOOKID.NEXTVAL, 'fm0000'), '多媒体制作', 'INSERT INTO 图书 VALUES(‘A’||TO_CHAR(BOOKID.NEXTVAL, ‘fm0000’), ‘网页制作精选’,‘01’,‘刘莹’,4,26.50);  
2.        执行结果:  
3.        已创建 1 行。  
4.        已创建 1 行。  
5.        步骤2:显示插入结果:  
6.        <PRE class=sql name="code">SELECT * FROM 图书;</PRE>  
7.<BR>        执行结果:  
8.<BR>        <PRE class=sql name="code">图书  图书名称             出 作者        数量       单价  
9.        ------- --------------------------------------------- ------------------------ ------------------- -----------  
10.01', '高建',3,28.00);</PRE>  
11.<BR>        A0001 计算机原理       01 刘勇     5       25.3  
12.<BR>        A0002  C语言程序设计  02 马丽    1      18.75  
13.<BR>        A0003 汇编语言程序设计  02 黄海明    15      20.18  
14.<BR>        A0005 软件工程       01 冯娟       5      27.3   
15.<BR>        A0010 多媒体制作    01 高建      3      28  
16.<BR>        A0011 网页制作精选  01 刘莹     4      26.5  
INSERT INTO 图书 VALUES('A'||TO_CHAR(BOOKID.NEXTVAL, 'fm0000'), '多媒体制作', 'INSERT INTO 图书 VALUES(‘A’||TO_CHAR(BOOKID.NEXTVAL, ‘fm0000’), ‘网页制作精选’,‘01’,‘刘莹’,4,26.50);
执行结果:
已创建 1 行。
已创建 1 行。
步骤2:显示插入结果:
Sql代码 SELECT * FROM 图书;  SELECT * FROM 图书;
执行结果:
Sql代码 图书  图书名称             出 作者        数量       单价           ------- --------------------------------------------- ------------------------ ------------------- -----------   01', '高建',3,28.00);  图书  图书名称             出 作者        数量       单价
------- --------------------------------------------- ------------------------ ------------------- -----------
01', '高建',3,28.00);
A0001 计算机原理       01 刘勇     5       25.3
A0002  C语言程序设计  02 马丽    1      18.75
A0003 汇编语言程序设计  02 黄海明    15      20.18
A0005 软件工程       01 冯娟       5      27.3
A0010 多媒体制作    01 高建      3      28
A0011 网页制作精选  01 刘莹     4      26.5
说明:根据序列定义可知,序列产生的初始值为10,函数TO_CHAR将数字10转换为字符。格式字符串“fm0000”表示转换为4位的字符串,空位用0填充。fm表示去掉转换结果的空格。故10将被转换成为字符串“0010”。连接运算后的图书编号为“A0010”。第二次调用则产生“A0011”,以此类推。
注意:通过查询看到插入的序号是连续的,但如果在插入的过程中使用了回退或发生了系统崩溃等情况,可能会产生序号的间隔。
查看序列
同过数据字典USER_OBJECTS可以查看用户拥有的序列。
通过数据字典USER_SEQUENCES可以查看序列的设置。
【训练1】  查看用户的序列:
SELECT SEQUENCE_NAME,MIN_VALUE,MAX_VALUE,INCREMENT_BY,LAST_NUMBER FROM
USER_SEQUENCES;
执行结果:

Sql代码
1.SEQUENCE_NAME        MIN_VALUE  MAX_VALUE INCREMENT_BY LAST_NUMBER  
2.        ------------------------------------ ------------------- --------------------- ----------------------- ----------------------  
3.        ABC          1      9999999         1          12  
4.        BOOKID   1      9999999         1          12 
SEQUENCE_NAME        MIN_VALUE  MAX_VALUE INCREMENT_BY LAST_NUMBER
------------------------------------ ------------------- --------------------- ----------------------- ----------------------
ABC          1      9999999         1          12
BOOKID   1      9999999         1          12
  说明:当前用户拥有两个序列:ABC和BOOKID。

同义词:
模式对象的同义词
   同义词(SYNONYM)是为模式对象起的别名,可以为表、视图、序列、过程、函数和包等数据库模式对象创建同义词。同义词有两种:公有同义词和私有同义词。公有同义词是对所有用户都可用的。创建公有同义词必须拥有系统权限CREATE PUBLIC SYNONYM;创建私有同义词需要CREATE SYNONYM系统权限。私有同义词只对拥有同义词的账户有效,但私有同义词也可以通过授权,使其对其他用户有效。同义词通过给本地或远程对象分配一个通用或简单的名称,隐藏了对象的拥有者和对象的真实名称,也简化了SQL语句。
如果同义词同对象名称重名,私有同义词又同公有同义词重名,那么,识别的顺序是怎样的呢?如果存在对象名,则优先识别,其次识别私有同义词,最后识别公有同义词。比如,执行以下的SELECT语句:
SELECT * FROM ABC;
如果存在表ABC,就对表ABC执行查询语句;如果不存在表ABC,就去查看是否有私有同义词ABC,如果有就对ABC执行查询(此时ABC是另外一个表的同义词);如果没有私有同义词ABC,则去查找公有同义词;如果找不到,则查询失败。
同义词的创建和使用
同义词的创建语法如下:
CREATE [PUBLIC] SYNONYM 同义词名
FOR [模式名.]对象名[@数据库链路名];
其中:
PUBLIC代表创建公有同义词,若省略则代表创建私有同义词。
模式名代表拥有对象的模式账户名。
数据库链路名是指向远程对象的数据库链接。
删除同义词的语法如下
DROP SYNONYM 同义词名;
删除同义词的人必须是同义词的拥有者或有DROP ANY SYNONYM权限的人。删除同义词不会删除对应的对象。
创建同义词
步骤1:创建私有同义词:

Sql代码
1.CREATE SYNONYM BOOK FOR 图书; 
CREATE SYNONYM BOOK FOR 图书;
执行结果:
同义词已创建。
步骤2:创建公有同义词(先要获得创建公有同义词的权限):

Sql代码
1.CREATE PUBLIC SYNONYM BOOK FOR SCOTT.图书; 
CREATE PUBLIC SYNONYM BOOK FOR SCOTT.图书;
执行结果:
同义词已创建。
步骤3:使用同义词:

Sql代码
1.SELECT * FROM BOOK; 
SELECT * FROM BOOK;
执行结果:

Sql代码
1.图书  图书名称            出 作者         数量     单价  
2.        -------- ---------------------------------------------- --- --------------- ------------- -----------  
3.        A0001 计算机原理         01 刘勇    5      25.3   
4.        A0002  C语言程序设计       02 马丽      1      18.75  
5.        A0003 汇编语言程序设计   02 黄海明   15      20.18  
6.        A0005 软件工程      01 冯娟        5      27.3   
7.        A0010 多媒体制作   01 高建        3      28    
8.        A0011 网页制作精选     01 刘莹        4     26.5   
图书  图书名称            出 作者         数量     单价
-------- ---------------------------------------------- --- --------------- ------------- -----------
A0001 计算机原理         01 刘勇    5      25.3
A0002  C语言程序设计       02 马丽      1      18.75
A0003 汇编语言程序设计   02 黄海明   15      20.18
A0005 软件工程      01 冯娟        5      27.3
A0010 多媒体制作   01 高建        3      28 
A0011 网页制作精选     01 刘莹        4     26.5 
  说明:对“BOOK”的查询等效于对“图书”的查询。如果同义词只是用户自己使用,则对象名前的模式名可以省略,如步骤1。如果是为其他用户使用,则必须添加模式名,如步骤2。
同义词的查看
通过查询数据字典USER_OBJECTS和USER_SYNONYMS,可以查看同义词信息。 
查看用户拥有的同义词:

Sql代码
1.SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE='SYNONYM'; 
SELECT OBJECT_NAME FROM USER_OBJECTS WHERE OBJECT_TYPE='SYNONYM';
执行结果:

Sql代码
1.OBJECT_NAME  
2.    --------------------------------------------------------------------------------  
3.        BOOK  
4.        QHBOOK 
OBJECT_NAME
--------------------------------------------------------------------------------
BOOK
QHBOOK
系统定义同义词
系统为常用的对象预定义了一些同义词,利用它们可以方便地访问用户的常用对象。这些同义词如下所示。


Sql代码
1.DICT    DICTIONARY  数据字典  
2.CAT USER_CATALOG    用户拥有的表、视图、同义词和序列  
3.CLU USER_CLUSTERS   用户拥有的聚簇  
4.IND USER_INDEXES    用户拥有的索引  
5.OBJ USER_OBJECTS    用户拥有的对象  
6.SEQ USER_SEQUENCES  用户拥有的序列  
7.SYN USER_SYNONYMS   用户拥有的私有同义词  
8.COLS    USER_TAB_COLUMNS    用户拥有的表、视图和聚簇的列  
9.TABS    USER_TABLES 用户拥有的表 
DICT DICTIONARY 数据字典
CAT USER_CATALOG 用户拥有的表、视图、同义词和序列
CLU USER_CLUSTERS 用户拥有的聚簇
IND USER_INDEXES 用户拥有的索引
OBJ USER_OBJECTS 用户拥有的对象
SEQ USER_SEQUENCES 用户拥有的序列
SYN USER_SYNONYMS 用户拥有的私有同义词
COLS USER_TAB_COLUMNS 用户拥有的表、视图和聚簇的列
TABS USER_TABLES 用户拥有的表


查看用户拥有的表:

Sql代码
1.SELECT TABLE_NAME FROM TABS; 
SELECT TABLE_NAME FROM TABS;
执行结果:

Sql代码
1.TABLE_NAME  
2.        ------------------------------  
3.        BONUS  
4.        DEPT  
5.        EMP 
TABLE_NAME
------------------------------
BONUS
DEPT
EMP

聚簇
所谓聚簇(CLUSTER),形象地说,就是生长在一起的表。聚簇包含一张或多张表,表的公共列被称为聚簇关键字,在公共列上具有同一值的列物理上存储在一起。那么在什么情况下需要创建聚簇呢?通常在多个表有共同的列时,应使用聚簇。比如有一张学生基本情况表,其中包含学生的学号、姓名、性别、住址等信息。另外,还设计了一张学生成绩表,其中除了包含学生成绩,也包含学生的学号、姓名、性别。那么这两张表共同的列就可以创建成聚簇。这样两张表的共同的学号、姓名和性别,就存放在了一起,相同的值只存放一次。如果两个表通过聚簇列进行联合,则会大大提高查询的速度,但对于插入等操作则会降低效率。
创建聚簇后,要创建使用聚簇的表,对聚簇还应该建立索引。如果不对聚簇建立索引,则不能对聚簇表进行插入、修改和删除操作。
创建聚簇需要CREATE CLUSTER系统权限。创建聚簇的语法如下:
CREATE CLUSTER 聚簇名(列名1 [,列名2]...)
SIZE n
TABLESPACE 表空间名;
列名是构成聚簇关键字的列集合。
SIZE 指明存储所有含有相同聚簇关键字的行的平均存储空间数(聚簇逻辑块的大小)。
TABLESPACE定义聚簇使用的表空间。
删除聚簇使用如下语法:
DROP CLUSTER 聚簇名 [INCLUDING TABLES [CASCADE CONSTRAINTS]];
其中:
INCLUDING TABLES表示一同删除聚簇表。如果不指明此选项,则必须手工删除聚簇表后才能删除聚簇本身。
CASCADE CONSTRAINTS表示删除聚簇表时,一起删除同其他表之间的约束关系。
创建和使用聚簇。
步骤1:创建聚簇:

Sql代码
1.CREATE CLUSTER COMM(STUNO NUMBER(5),STUNAME VARCHAR2(10),SEX VARCHAR2(2))  
2.        SIZE 500  
3.        TABLESPACE USERS; 
CREATE CLUSTER COMM(STUNO NUMBER(5),STUNAME VARCHAR2(10),SEX VARCHAR2(2))
SIZE 500
TABLESPACE USERS;
执行结果:
已创建数据簇。
步骤2:创建第一张聚簇表:

Sql代码
1.CREATE TABLE STUDENT(  
2.STUNO NUMBER(5),  
3.STUNAME VARCHAR2(10),  
4.SEX VARCHAR2(2),  
5.ADDRESS VARCHAR2(20),  
6.E_MAIL VARCHAR2(20)  
7.)  
8.CLUSTER COMM(STUNO,STUNAME,SEX); 
CREATE TABLE STUDENT(
STUNO NUMBER(5),
STUNAME VARCHAR2(10),
SEX VARCHAR2(2),
ADDRESS VARCHAR2(20),
E_MAIL VARCHAR2(20)
)
CLUSTER COMM(STUNO,STUNAME,SEX);
执行结果:
表已创建。
步骤3:创建第二张聚簇表:

Sql代码
1.CREATE TABLE SCORE(  
2.STUNO NUMBER(5),  
3.STUNAME VARCHAR2(10),  
4.SEX VARCHAR2(2),  
5.CHINESE NUMBER(3),  
6.MATH NUMBER(3),  
7.ENGLISH NUMBER(3) )  
8.CLUSTER COMM(STUNO,STUNAME,SEX); 
CREATE TABLE SCORE(
STUNO NUMBER(5),
STUNAME VARCHAR2(10),
SEX VARCHAR2(2),
CHINESE NUMBER(3),
MATH NUMBER(3),
ENGLISH NUMBER(3) )
CLUSTER COMM(STUNO,STUNAME,SEX);
执行结果:
表已创建。
步骤4:为聚簇创建索引:

Sql代码
1.CREATE INDEX INX_COMM ON CLUSTER COMM; 
CREATE INDEX INX_COMM ON CLUSTER COMM;
步骤5:向表中插入数据:

Sql代码
1.INSERT INTO STUDENT VALUES(10001,'黄凯','男','宝安','HK123@163.COM');  
2.        INSERT INTO STUDENT VALUES(10002,'苏丽','女','罗湖','SL99@163.COM');  
3.        INSERT INTO STUDENT VALUES(10003,'刘平平','男','南山','PP2003@SHOU.COM');  
4.INSERT INTO SCORE VALUES(10001,'黄凯','男',70,85,93);  
5.        INSERT INTO SCORE VALUES(10002,'苏丽','女',65,74,83);  
6.        INSERT INTO SCORE VALUES(10003,'刘平平','男',88,75,69); 
INSERT INTO STUDENT VALUES(10001,'黄凯','男','宝安','HK123@163.COM');
INSERT INTO STUDENT VALUES(10002,'苏丽','女','罗湖','SL99@163.COM');
INSERT INTO STUDENT VALUES(10003,'刘平平','男','南山','PP2003@SHOU.COM');
INSERT INTO SCORE VALUES(10001,'黄凯','男',70,85,93);
INSERT INTO SCORE VALUES(10002,'苏丽','女',65,74,83);
INSERT INTO SCORE VALUES(10003,'刘平平','男',88,75,69);
执行结果:略。
步骤6:删除聚簇及聚簇表:

Sql代码
1.DROP CLUSTER COMM INCLUDING TABLES CASCADE CONSTRAINTS; 
DROP CLUSTER COMM INCLUDING TABLES CASCADE CONSTRAINTS;
执行结果:
数据簇已丢弃。
说明:在本例的两个表中,为其三个共同列STUNO、STUNAME和SEX创建了聚簇,在创建表时说明了使用的聚簇,创建聚簇后为其创建了索引,然后插入了一些数据。

数据库链接
数据库链接(DATABASE LINK)是在分布式环境下,为了访问远程数据库而创建的数据通信链路。数据库链接隐藏了对远程数据库访问的复杂性。通常,我们把正在登录的数据库称为本地数据库,另外的一个数据库称为远程数据库。有了数据库链接,可以直接通过数据库链接来访问远程数据库的表。常见的形式是访问远程数据库固定用户的链接,即链接到指定的用户,创建这种形式的数据库链接的语句如下:
CREATE DATABASE LINK 链接名 CONNECT TO 账户 IDENTIFIED BY 口令
USING 服务名;
创建数据库链接,需要CREATE DATABASE LINK系统权限。
数据库链接一旦建立并测试成功,就可以使用以下形式来访问远程用户的表。
表名@数据库链接名
在局域网上创建和使用数据库链接。
步骤1:创建远程数据库的服务名,假定局域网上另一个数据库服务名为MYDB_REMOTE。
步骤2:登录本地数据库SCOTT账户,创建数据库链接:

Sql代码
1.CONNECT SCOTT/TIGER@MYDB  
2.        CREATE DATABASE LINK abc CONNECT TO scott IDENTIFIED BY tiger USING 'MYDB_REMOTE'; 
CONNECT SCOTT/TIGER@MYDB
CREATE DATABASE LINK abc CONNECT TO scott IDENTIFIED BY tiger USING 'MYDB_REMOTE';
执行结果为:
数据库链接已创建。
步骤3:查询远程数据库的数据:

Sql代码
1.SELECT * FROM emp@abc; 
SELECT * FROM emp@abc;
结果略。
步骤4:一个分布查询:

Sql代码
1.SELECT ename,dname FROM emp@abc e,dept d WHERE e.deptno=d.deptno; 
SELECT ename,dname FROM emp@abc e,dept d WHERE e.deptno=d.deptno;
结果略。
说明:在本例中,远程数据库服务名是MYDB_REMOTE,创建的数据库链接名称是abc.emp@abc表示远程数据库的emp表。步骤4是一个联合查询,数据来自本地服务器的dept表和远程服务器的emp表。
分享到:
评论

相关推荐

    oracle笔记其它数据库对象(序列索引同义词)

    oracle笔记其它数据库对象(序列、索引、同义词),有创建序列,创建索引,创建同义词的具体代码案例

    oracle实验9-10-索引与视图-序列和同义词的创建.doc

    Oracle 实验报告 - 索引、视图、序列和同义词的创建 本实验报告旨在介绍 Oracle 中的索引、视图、序列和同义词的概念和应用。通过实验,掌握创建索引、视图、序列和同义词的命令,并理解它们在数据库中的作用。 一...

    oracle 其他数据库对象

    Oracle数据库的核心组成部分之一就是模式对象,这些对象是数据库中用户定义的对象,包括表、视图、索引等。模式对象属于数据库中的一个特定模式(schema),每个模式对应一个数据库用户。以下是Oracle数据库中几种常见...

    Oracle数据库模式对象的应用与管理.pdf

    模式,简单来说,是一系列逻辑数据对象或结构的集合,它与数据库用户相对应,每个模式由一个数据库用户拥有,并且模式名称与用户名称相同。在同一模式内,数据库对象的名称必须是唯一的,而不同模式间的对象可以同名...

    Oracle数据库对象管理及备份与恢复.pdf

    同义词(SYNONYM)是表、视图、序列等数据库对象的别名,用于简化对象访问和提高数据库的安全性。 Oracle的备份与恢复工具RMAN(Recovery Manager)提供了强大的备份、恢复和恢复管理功能。RMAN备份策略包括完全...

    数据库开发 Oracle数据库 SQL开发教程 第16章 序列、索引、同义词(共34页).pdf

    Oracle数据库的SQL开发教程涵盖了广泛的主题,其中包括序列、索引和同义词这些重要的数据库对象。在本章中,我们将深入探讨这些概念及其在数据库管理中的应用。 **序列(SEQUENCE)**是Oracle数据库中用于生成唯一...

    oracle 同义词和序列

    创建同义词有助于简化数据库对象的引用,尤其是在多用户环境中,可以避免复杂的权限管理和长的对象路径。删除同义词同样使用 `DROP SYNONYM` 语句。 最后,序列是 Oracle 中用于生成唯一、连续整数的数据库对象,常...

    数据库模式对象与数据字典

    模式在Oracle数据库中扮演着至关重要的角色,它是一组逻辑数据结构或对象的集合,用于组织和维护表、视图、索引等数据库对象。每个模式与一个数据库用户相对应,这意味着一个模式只能被一个特定的数据库用户拥有,且...

    ORACLE 数据对象的分析2(索引_序列_同义词)

    通过以上详细介绍,我们可以看出索引、序列和同义词都是Oracle数据库中非常重要的对象,它们各自承担着不同的功能与职责,共同促进了数据库性能的提升和管理的便捷性。在实际应用中,合理地设计和使用这些对象能够...

    第5章 其他数据库对象.ppt

    数据库模式对象是Oracle数据库的核心组成部分,包括了表、视图、索引、聚簇、同义词和数据库链接等。表是存储数据的基本结构,用于组织和管理数据;视图是从一个或多个表中创建的虚拟表,提供不同视角的数据访问;...

    查看ORACLE 数据库及表信息.docx

    这条语句将显示数据库中所有的对象信息,包括表、索引、视图、同义词、序列等对象的信息。 二、查看ORACLE数据库中的表信息 ORACLE数据库中的表信息是数据库管理员需要了解的重要信息。通过查看表信息,可以了解表...

    Oracle数据库培训.ppt

    模式对象是 Oracle 数据库中的数据库对象的集合,包括表、视图、序列、存储过程、索引、聚簇、同义词、数据库联结等。 数据块是 Oracle 数据库中的基本存储单元,用于存储数据。范围段是 Oracle 数据库中的逻辑存储...

    大型数据库技术-实验三 oracle对象管理及使用.doc

    实验三的主题是“大型数据库技术-Oracle对象管理及使用”,主要涵盖了Oracle数据库中表、索引、视图、同义词以及序列等核心对象的创建、修改、查看和删除操作。Oracle是世界上最广泛使用的数据库管理系统之一,尤其...

    数据库开发 Oracle数据库 SQL开发教程 全套PPT课件 共20个章节.rar

    【完整课程列表】 oracle_系统表.pdf ...数据库开发 Oracle数据库 SQL开发教程 第16章 序列、索引、同义词(共34页).pdf 数据库开发 Oracle数据库 SQL开发教程 第17章 用户、权限和角色(共28页).pdf

    Oracle数据库用户、表、表空间之间关系.doc

    模式对象是Oracle数据库中用户创建的各种应用对象,如表、索引、视图、序列、同义词、存储过程等。每个模式对象都在某个表空间内占用一定的存储空间,这可以理解为文件夹中的文件,而文件夹代表数据文件,抽屉代表表...

    Oracle系统表汇总.docx

    数据库对象是Oracle数据库中的一种基本单元,包括表、索引、视图、序列、同义词、触发器等。数据库对象管理是Oracle数据库管理系统的重要组件,用于管理数据库对象的创建、修改、删除等操作。通过dba_objects视图,...

    Oracle数据库的基本概念.pptx

    模式对象是Oracle数据库的逻辑结构的集合,包括表、索引、聚簇、视图、同义词、序列、存储函数、过程和包、物化的视图、数据库触发器、数据库链接、Java类、Java资源和Java源等对象。这些对象之间有着紧密的关系,...

    Oracle数据库基础知识 ISSUE1.0.doc

    Oracle数据库的基本概念包括数据库实例、表空间、表、索引、视图、序列、同义词等。数据库实例是Oracle数据库的核心组件,负责管理数据库的所有操作。表空间是Oracle数据库中的逻辑存储单元,用于存储数据库表和索引...

    oracle数据库对象导出脚本

    接下来的几行代码分别针对不同类型的数据库对象进行了处理,包括表、视图、同义词、序列、索引、触发器、函数以及存储过程等。每一类对象都通过`SELECT DBMS_METADATA.GET_DDL`命令来获取其定义的DDL(Data ...

    oracle数据库入门书

    本部分还会介绍表空间、数据库对象等高级概念,包括同义词、序列、视图和索引等。 PL/SQL是Oracle提供的过程化语言,它允许开发者编写复杂的数据库程序。PL/SQL程序设计章节介绍PL/SQL的基本概念、数据类型、条件...

Global site tag (gtag.js) - Google Analytics