21.1.6 删除视图的操作
Drop view 视图名;
21.2 序列
序列是Oracle提供的用于产生一系列唯一数字的数据库对象。
21.2.1 序列的特性
自动提供唯一的数值
共享对象
用于提供主键值(主要特性)
将序列值装入内存可以提高访问效率
21.2.2 创建序列
在用户自己模式中创建序列时,必须具有 create sequence 系统权限。要在其他模式中创建序列,必须具有 create any sequence系统权限。
语法形式:
CREATE SEQUENCE <seq_name> //创建序列名称
[INCREMENT BY n] //递增的序列值是n, 如果n是正数就递增,如果是负数就递减,默认是1
[START WITH n] //开始值,递增默认是minvalue ,递减是maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循环或不循环
[{CACHE n | NOCACHE}]; //分配并存入到内存中
NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用
CURRVAL 中存放序列的当前值
NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效
21.2.3 修改序列(修改序列的增量,、最大值、最小值、循环选项或是否装入内存)
语法形式:
ALTER SEQUENCE <seq_name> //创建序列名称
[INCREMENT BY n] //递增的序列值是n, 如果n是正数就递增,如果是负数就递减,默认是1
[START WITH n] //开始值,递增默认是minvalue ,递减是maxvalue
[{MAXVALUE n | NOMAXVALUE}] //最大值
[{MINVALUE n | NOMINVALUE}] //最小值
[{CYCLE | NOCYCLE}] //循环或不循环
[{CACHE n | NOCACHE}]; //分配并存入到内存中
注意事项:
必须是序列的拥有者或对序列有 ALTER 权限
只有将来的序列值会被改变
改变序列的初始值只能通过删除序列之后重建序列的方法实现
21.2.4 删除序列
使用DROP SEQUENCE 语句删除序列
删除之后,序列不能再次被引用
21.3 同义词
同义词是表、索引、视图等模式对象的一个别名。同义词只是数据库对象的一个替代词,在使同义词时,Oracle会将其翻译为对应的对象的名称。同义词只在Oracle数据库的数据字典中保存其定义描述,因此同义词并不占用任何实际的存储空间。
在开发数据库应用程序时,应当尽量避免直接引用表、视图、或其他数据库的名称,而改用这些对象的同义词。这样可以避免当管理员对数据库对象做出修改和变动之后,必须重新编译应用程序。使用同义词之后,即使引用的对象发生变化,也只需要在数据库中对同义词进行修改,而不必对应用程序做任何改动。
21.3.1 创建同义词的语法形式如下:
CREATE [PUBLIC] SYNONYM synonym_name
FOR schema_object
其中,PUBLIC选项决定创建的同义词是否为公有同义词。
下面通过一个示例来说明如何使用同义词。
select * from vendition.商品信息;
也就是说,必须使用模式名加表名的形式,对表进行限定。
为了简化对该表的访问,可以对该表建立一个相对简单的公有同义词:
drop public synonym merch_info;
二十一、索引
在关系数据库中,索引是一种与表有关系的数据库结构,它可以使对应于表的SQL语句执行的更快。
Oracle中的索引可以拥有它自己的存储空间,不必与相关的表处于同一个表空间中。
在Oracle中可以创建多种类型的索引,以适应各种表的特点。常用的索引类型有B树索引、反向引用键索引、位图索引、基于函数的索引、簇索引、全局和局部索引等。
21.1 B树索引
B树索引是Oracle数据库中最常用的一种索引。当使用CREATE INDEX语句创建索引时,默认创建的索引就是B树索引。
B树索引是按B树结构或使用B树算法组织并存储索引数据的。B树索引就是一棵二叉树,它由根、分支节点和叶子节点三部分构成。其中,根包含指向分支节点的信息,分支节点包含指向下级分支节点和指向叶子节点的信息,叶子节点包含索引列和指向表中每个匹配行的ROWID值。叶子节点是一个双向链表,因此可以对其进行任何方面的范围扫描。
B树索引中所有叶子节点都具有相同的深度,所以不管查询条件如何,查询速度基本相同。另外,B树索引能够适应各种查询条件,包括精确查询、模糊查询和比较查询。
B树索引的分类如下所示。
Unique:唯一索引,其索引值不能重复,但允许为NULL。在创建索引时指定UNIQUE关键字可以创建唯一索引。当建立“主键约束条件”时Oracle会自动在相应列上建立唯一索引,主键列不允许为NULL。
Non-Unique:非唯一索引,其索引值可以重复,允许为NULL。默认情况下,Oracle创建的索引是非唯一索引。
Reverse Key:反向关键字索引。通过在创建索引时指定“REVERSE”关键字,可以创建反向关键字索引,被索引的每个数据列中的数据都是反向存储的,但仍然保持原来数据列的次序。
21.2 位图索引
在B树索引中,保存的是经排序过的索引列及其对应的ROWID值。但是对于一些基数很小的列来说,这样做并不能显著提高查询的速度。所谓基数,是指某个列可能拥有的不重复值的个数。比如性别列的基数为2(只有男和女)。
因此,对于象性别、婚姻状况、政治面貌等只具有几个固定值的字段而言,如果要建立索引,应该建立位图索引,而不是默认的B树索引。
当创建位图索引时,Oracle会扫描整张表,并为索引列的每个取值建立一个位图。在这个位图中,对表中每一行使用一位(bit,取值为0或1)来表示该行是否包含该位图的索引列的取值,如果为1,则表示该位对应的ROWID所在的记录包含该位图索引列值。最后通过位图索引中的映射函数完成位到行的ROWID的转换。
21.3 函数索引
前面的索引都是直接对表中的列创建索引,除此之外,Oracle还可以对包含有列的函数或表达式创建索引,这就是函数索引。
当需要经常访问一些函数或表达式时,可以将其存储在索引中,当下次访问时,由于该值已经计算出来了,因此,可以大大提高那些在WHERE子句中包含该函数或表达式的查询操作的速度。
下面通过一个例子看看函数索引的用法。在SALES表中,TOPIC列的值如果采用首字母大写的方式存储。
21.4 创建索引
创建索引使用CREATE INDEX语句。
在用户自己的方案中创建索引,需要CREATE INDEX系统权限,在其他用户的方案中创建索引则需要CREATE ANY INDEX系统权限。另外,索引需要存储空间,因此,还必须在保存索引的表空间中有配额,或者具有UNLIMITED TABLESPACE系统权限。
CREATE INDEX语句的语法如下:
CREATE [UNIQUE] | [BITMAP] INDEX index_name
ON table_name([column1 [ASC|DESC],column2
[ASC|DESC],…] | [express])
[TABLESPACE tablespace_name]
[PCTFREE n1]
[STORAGE (INITIAL n2)]
[NOLOGGING]
[NOLINE]
[NOSORT];
其中:
UNIQUE:表示唯一索引,默认情况下,不使用该选项。
BITMAP:表示创建位图索引,默认情况下,不使用该选项。
PCTFREE:指定索引在数据块中的空闲空间。对于经常插入数据的表,应该为表中索引指定一个较大的空闲空间。
NOLOGGING:表示在创建索引的过程中不产生任何重做日志信息。默认情况下,不使用该选项。
ONLINE:表示在创建或重建索引时,允许对表进行DML操作。默认情况下,不使用该选项。
NOSORT:默认情况下,不使用该选项。则Oracle在创建索引时对表中记录进行排序。如果表中数据已经是按该索引顺序排列的,则可以使用该选项。
可以在一个表上创建多个索引,但这些索引的列的组合必须不同。如下列的索引是合法的。
CREATE INDEX idx1 ON SALES(ID,TOPIC)
CREATE INDEX idx2 ON SALES(TOPIC,ID)
其中,idx1和idx2索引都使用了ID和TOPIC列,但由于顺序不同,因此是合法的。
21.4.1 创建B树索引
B树索引是Oracle默认的索引类型,当在WHERE子句中经常要引用某些列时,应该在这些列上创建索引。
例如,经常需要在SALES表的TOPIC列上按标题查询,就可以在TOPIC列上建立B树索引。
21.4.2 创建位图索引
位图索引适用于表中的列具有较小的基数时,在创建位图索引时,必须在CREATE TABLE语句中显式地指定BITMAP关键字。例如,下面的语句在“商品信息”表的“供应商编号”和“产地”列上创建位图索引Merch_Bitmap_Index:
Create bitmap index Merch_bitmap_index ON 商品信息(供应商编号,产地) tablespace users;
与B树索引类似,在创建位图索引时,也可以通过STORAGE子句来设置索引的存储参数。
21.4.2 创建反向键索引
创建返乡索引键时,必须在Create index语句中指定关键字REVERSE,反向键索引适用于严格排序的列。例如,下面的语句可以为“商品信息”表的“商品编号”列创建反向键索引:
Create index Merch_Reverse_index ON 商品信息(商品编号) reverse
PCTFREE 30
TABLESPACE users;
21.4.3 创建基于函数的索引
创建基于函数的索引,可以提高当在查询条件中使用函数和表达式时查询的执行速度。
提示:在创建基于函数的索引时,不仅可以使用SQL函数,还可以使用用户自定义函数。
例如:
Create index function_index on 入库单信息(to_char(‘入库日期’,’yyyy-mm-dd’))
Tablespase users;