第四章Oracle数据库对象(7)

2019-06-17 19:54

第04章 数据库对象

删除有聚簇表的索引簇

DROP CLUSTER cluster_name INCLUDE TABLES 删除有聚簇表和有约束的索引簇

DROP CLUSTER cluster_name INCLUDE TABLES CASCADE CONSTAINTS 删除聚簇表

DROP TABLE tablename

可以象删除普通表一样删除聚簇表。一般2个表的聚簇,如果删除其中一个,聚簇没有必要存在了,所以一般删除聚簇时一起删除表(INCLUDE TABLES)。

删除簇索引

DROP INDEX indexname

簇索引可以象一般索引一样删除,然后重建。但注意,没有索引,索引簇不能使用。 索引簇信息

索引簇的信息存放于视图:dba|user_clusters和dba|user_clu_columns。

4.3.6 散列簇

概念:如果有查询:SELECT * FROM students WHERE sno=1234 通常的方法是:如果没有索引,则进行全表扫描;如果建立了索引,先查询索引,然后根据索引中记录的rowid读取相应的记录。能不能根据1234直接计算rowid,然后按rowid读取相应的记录?

散列(Hash)实质上是一种将表中一个列值或几个列的组合值计算为地址的方法(KAT:Key to Address Transformation)。计算地址的列称为散列键,散列键常常是主键或唯一键。

散列簇是将具有同一散列码值的记录存储同一数据块中,每一记录的散列值是散列函数返回的值,作为地址值,同一地址值的数据存放在同一数据块中。建立一个散列聚簇时,可指定一散列函数或使用Oracle内部的散列函数。

优点:根据散列键计算记录位置,不用查询索引获得记录位置,减少了磁盘I/O。 条件:

(1)查询是基于散列键的等值查询,而不是范围查询,形如

SELECT...WHERE cluster_key=?;

- 31 -

第04章 数据库对象

(2)静态数据表,主要用于查询,而不是增删改的表

(3)散列键经过散列函数运算的结果,具有比较均匀的数值分布。 步骤:

第一步:建立散列簇 第二步:建立散列表

注意:索引簇必须建立索引,而散列簇不能建立索引。

4.3.7 创建散列簇

创建散列簇的要素: (1)簇的类型及名称

(2)散列键及数据类型的确定,要求为NUMBER类型 (3)存放同一散列值的数据块大小(记录多少) (4)表空间

(5)存放单表还是多表 (6)不同散列值的个数 (7)散列函数:内部还是自定义 创建散列簇的语法:

CREATE CLUSTER cluster_name(column datatype[,column datatype,…])

[SIZE n{K|M}]

[TABLESPACE tablespace] [SINGLE TABLE ] HASHKEYS integer [HASH IS expression] 说明:

[SIZE n{K|M}]:同一散列值的对应数据大小,如果散列值与行一一对应,则为一行大小。 [TABLESPACE tablespace]:散列簇所在表空间 [SINGLE TABLE ]: 单表散列(散列簇中只存放一个表)

- 32 -

第04章 数据库对象

HASHKEYS integer:不同散列值的个数,如果散列值与行一一对应,则为行数。 [HASH IS expression]:HASH函数,缺省为Oracle内部函数,组合键只能使用内部函数 举例:

例1:创建散列簇

CREATE CLUSTER student_cluster(sno number(10))

SIZE 200

//每条记录的大小为200字节 //表空间 //单表散列

//散列值数,即学生记录数

//散列值为sno,散列值与行一一对应,不使用内部散列函数

TABLESPACE users SINGLE TABLE

HASHKEYS 10000 HASH IS sno 例2:创建散列表 表1:学生基本情况表 CREATE TABLE student(

sno

NUMBER(10),

sname VARCHAR2(20), ??

)CLUSTER student_cluster(sno);

4.3.8 维护散列簇

修改散列簇

ALTER CLUSTER cluster_name

但是SIZE、HASHKEYS、HASH IS参数不能修改。 删除散列簇

DROP CLUSTER cluster_name [INCLUDE TABLES][CASCADE CONSTAINTS] 同时删除散列表和约束。

- 33 -

第04章 数据库对象

4.4 视图

对于一个公司,有如下的员工表(EMP)。 dno 1 1 2 2 3 4 eno 1 2 3 4 5 6 ename A B C D E F esalary 4000 3500 1000 1200 1500 800 对于内部操作员,不能查询员工的工资;

(SELECT dno,eno,ename FROM emp;)=A

对于外部操作员,不能查询部门编号为1(领导)信息,其它员工的工资也不能查询;

(SELECT dno,eno,ename FROM emp WHERE dno<>1;)=B

如果分别建立上述要求的数据表,一是重复,产生冗余;二是当修改数据时,同时修改多个表,容易产生不一致;如果增加新的要求,又建立新表?视图(VIEW)是一种很好的解决办法。

概念:视图View是一种数据库对象,是一种命名的SQL查询语句。该SQL查询语句从一个或多个表(称为基表)查询,查询的记录形成一个“虚表”。为什么是虚表呢?Oracle只在数据字典中保存SQL语句定义,并不实际保存查询的记录,只是在使用视图的时候,按名字找到相应的SQL查询语句,然后重新执行SQL查询语句,查询的记录会随基表的更新而变化。如上面定义的A,B为视图名。可以象使用表一样使用视图。

视图和基表的关系:

区别:①基表是数据存放的地方,有实际的数据,需要存储空间。②视图中没有数据,只有一条SQL查询语句,并保存在数据字典中。

联系:①视图是一个查询语句,其结果仍是关系结构,与表的结构相同,故称为”虚表”。②一个视图可以派生于一个或多个基表,也可以从其它视图中派生,基表的数据发生变化时,视图

- 34 -

第04章 数据库对象

是从最新的数据中查询,查询结果会自动更新。③如果视图允许更新,实际更新的是基表的数据。

视图的作用:

①安全:可以只呈现用户权限范围内的数据,对基表的数据进行选择或投影后呈现给用户,保护了敏感数据,增加了安全性。视图有视图权限,对视图的操作要有相关权限。

②方便:可以封装复杂的SQL查询,简化用户的操作,也消除了不同的人所用的语句差异所造成的不一致性。

4.4.1 建立视图

CREATE [or REPLACE] [FORCE | NO FORCE] VIEW [user.]viewname

[column_name,...] AS query

[WITH CHECK OPTION] [CONSTRAINT constraint] [WITH OBJECT OID | DEFAULT] [WITH READ ONLY] 说明:

[or REPLACE]:如果同名视图存在,则替换(先删除后建立)。

[FORCE | NO FORCE]:如果基表不存在或无权限访问基表,建立一个不可使用的视图。缺省为NO FORCE。

[column_name,...]:视图的列,缺省为SQL查询的列,一般用于重新命名列。 AS query:视图对应的SQL查询语句。

[WITH CHECK OPTION]:Update和Insert更新操作必须满足视图定义。 [CONSTRAINT constraint]:对视图更新操作进行限制。

[WITH OBJECT OID|DEFAULT]:对象视图的对象类型属性,DEFAULT(缺省)主关键字标识。 [WITH READ ONLY]:只读视图。 建立视图举例:

假设有如下的基表,员工表emp

- 35 -


第四章Oracle数据库对象(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:污水处理283个为什么(绝对不错)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: