表
oracle支持多种表类型:
- 堆组织表(heap prganized,默认的“普通”表):数据在其中以堆的方法管理。增加数据时,会找到并使用段中第一个能放下此数据的自由空间。
- 索引组织表(index organized table):按索引结构存储。IOT对信息检索,空间数据和OLAP应用特别有用。
- 索引聚簇表(index clustered):聚簇是指一个或多个表组成的组,这些表中的数据物理地址存储在相同的数据块上,有相同聚簇键值的所有物理行存储在相邻的位置。索引聚簇表的优点是当平凡访问以聚簇键连接的多个表时,能减少磁盘IO并提高查询性能。
- 散列聚簇表(hash clustered):散列聚簇是将键散列到聚簇上,从而直接找到数据应该在哪个数据库块上。在散列聚簇中,数据就是索引。如果需求频繁的通过键的相等性比较来读取数据,散列聚簇表就很适用。
- 嵌套表(nested):是系统生成和维护的父、子关系的子表。
- 临时表(temporary):存储事务期间或会话期间的“草稿”数据。临时表根据需求从当前用户的临时表空间份分配临时段。每个会话只能看到本会话分配的区段,而不会看到其他会话创建的任何数据。
- 对象表(object):基于某种对象类型创建的表。
- 外部表(extenrnal table):表中的数据不存储在数据库中,而是放在数据库外。
视图
由查询sql组成,简化对多个表数据的访问 ,可以保证表中数据的安全,将应用与表中某些特定的结构分离。
序列
create sequence sq_name
ncrement by 1 --增长度
start with 1 --开始值
maxvalue(最大值) 或者 nomaxvalue
order --指定一定往下增加
nocycle(cycle) -- 是否循环
cache 10 --CACHE(缓冲)定义存放,对序列进行内存缓冲,可以改善序列的性能
同义词
create [or replace] [public] synonym 同义词名称 for [用户名.]对象名;
触发器
create or replace trigger tg_name.........
索引
主要分为B*树索引、位图索引(bitmao index)、位图联接索引(bitmap join index)、基于函数的索引(function-based index)和应用域索引(application domain index)。
B树索引主要的子类型:索引组织表(index organized),B树聚簇索引(B * tree cluster index),降序索引(descending index),反向键索引(reverse key index)。
其中:·
- UNIQUE代表创建惟一索引,不指明为创建非惟一索引。
- BITMAP 代表创建位图索引,如果不指明该参数,则创建B*树索引。列名是创建索引的关键字列,可以是一列或多列。
B-树索引在Oracle中是一个通用的索引,在创建索引时它就是默认的索引类型。最多可以包括32列。
位图索引Oracle为每个唯一键创建一个位图,然后把与键值所关联的ROWID保存为位图。最多可以包括30列。
位图索引在加载表(插入操作)时通常要比B-树索引做得好。通常,位图索引要比一个低基数(指这个列只有很少的可取值)上的B-树索引要快3~4倍,但如果新增的值占插入行的70%以上时,B-树索引通常会更快一些。当每条记录都增加一个新值时,B-树索引要比位图索引快3倍。
查看索引是否生效:
alter index index_name monitoring usage;
###可变数组
语法:a、
-
创建一个类型作为可变数组基类型 :
CREATE TYPE ELEMENT_TYPE AS OBJECT (...);
-
基于基类型创建可变数组类型:
CREATE OR REPLACE TYPE TYPE_NAME AS VARRAY(maximun_size) OF ELEMENT_TYPE [NOT NULL]
其中,TYPE_NAME为可变数组的名字, ELEMENT_TYPE表示可变数组的类型(基类型) not null表示数组元素不能为null。
###嵌套表
嵌套表是表中之表。一个嵌套表是某些行的集合,它在主表中表示为其中的一列。对主表中的每一条记录,嵌套表可以包含多个行。在某种意义上,它是在一个表中存储一对多关系的一种方法。
语法:
-
创建一个类型作为嵌套表类型 CREATE TYPE ELEMENT_TYPE AS OBJECT (。。。);
-
基于基类型创建嵌套表类型CREATE OR REPLACE TYPE TYPE_NAME AS TABLE OF ELEMENT_TYPE
其中,TYPE_NAME 为嵌套表的名字, ELEMENT_TYPE表示嵌套表的类型(基类型);
###伪列
Oracle 中伪列就像一个表列,但是它并没有存储在表中,伪列可以从表中查询,但不能插入、更新和删除它们的值,常用的伪列有ROWID和ROWNUM。
ROWID 是表中行的存储地址,该地址可以唯一地标识数据库中的一行,可以使用 ROWID 伪列快速地定位表中的一行。如:scott中SELECT rowid,empno,ename,job FROMemp;
ROWNUM 是查询返回的结果集中行的序号,可以使用它来限制查询返回的行数。如:scott中SELECT rownum,empno,ename,job FROM emp;