许多应用程序要求使用唯一的数字作为主键的值,你即可以在应用程序中构建代码来处理这种需求,也可以用一个序列来产生唯一的数字。如果你想要增进某些查询的性能,你应该考虑创建一个索引,你也可以用索引在列或列的集合上强制唯一性。你可以用同义词为对象提供可替代的名字。下面我们来介绍序列、索引和同义词三个数据库对象。
一、创建和管理序列
序列是用户创建的数据库对象,可以被多个用户共享。 序列的一个典型的用途是创建一个主键的值,它对于每一行必须是唯一的。序列由一个Oracle内部程序产生并增加或减少。 序列是一个节省时间的对象,因为它可以减少应用程序中产生序列程序的代码量。 序列号独立于表被存储和产生,因此,相同的序列可以被多个表使用。
1.1 定义和查询序列
用CREATE SEQUENCE语句自动产生序列数。语法:
CREATE SEQUENCE sequence --sequence 是序列发生器的名字 [INCREMENT BY n] --序列号之间的间隔,在这儿n是一个整数, [START WITH n] --产生的第一个序列数,默认值1。 [{MAXVALUE n| NOMAXVALUE}] --序列能产生的最大值,默认NOMAXVALUE(升序:10^27;降序:-1) [{MINVALUE n| NOMINVALUE}] --最小序列值,默认NOMINVALUE(升序:1;降序-(10^26)) [{CYCLE | NOCYCLE}] --指定序列在达到它的最大或最小值之后,是否继续产生,默认NOCYCLE。 [{CACHE n| NOCACHE}]; --指定Oracle服务器预先分配多少值,并且保持在内存中,默认缓冲20个值。
如果INCREMENT BY值是负数,序列是降序。另外,ORDER | NOORDER选项可用,ORDER选项保证序列值按顺序产生,如果你将序列用于产生主键值它是不重要的,该选项仅与Parallel Server(并行服务)选项有关。如果序列值被高速缓冲,系统故障它们将被丢失。
一旦创建了序列,它就被文本化在数据字典中。因为序列是一个数据库对象,你可以在USER_OBJECTS数据字典表中识别它。你也可以从USER_SEQUENCES数据字典视图中用选择确认序列的设置。下面是一个定义和查询序列的实例。
--创建序列 CREATE SEQUENCE seq_test INCREMENT BY 2 START WITH 3 MAXVALUE 1000 NOCYCLE --若用户产生主键,怎不使用CYCLE选项。 NOCACHE --不允许高速缓冲; --查询序列 SELECT object_name,object_id,object_type FROM USER_OBJECTS WHERE object_name = 'SEQ_TEST'; SELECT * FROM USER_SEQUENCES WHERE sequence_name = 'SEQ_TEST';