序列(sequence)是一种数据库项,生成一个整数序列。序列所生成的整数通常可以用来填充数字类型的主键列。
创建序列
CREATE SEQUENCE sequence_name
[START WITH start_name] //默认为1
[INCREMENT BY increment_num] //默认为1,increment_num的绝对值必须小于maximum与minimum之差。
[ { MAXVALUE maximum_num | NOMAXVALUE } ] //NOMAXVALUE指定升序序列的最大值为10的27次方,降序序列的最大值为-1
[ { MINVALUE minimum | NOMINVALUE } ] //NOMINVALUE指定升序序列的最小值为1,降序序列的最小值为-10的26次方
[ { CYCLE | NOCYCLE } ] //默认NOCYCLE,序列达到最大值或最小值之后就不能再生成整数了。
[ { CACHE cache_num | NOCACHE } ] //默认缓存整数20,cache最少2个,最多CELL(maximum-minimum)/ABS(increment)。 NOCACHE指定不缓存任何整数
[ { ORDER | NOORDER } ]; //NOORDER不确保按照请求次序生成整数。NOORDER为默认值。
获取有关序列的信息
通过user_sequences(all_sequences)视图可以获得有关序列的信息。
使用序列
序列生成一系列数字。一个序列中包含两个伪列,分别是currval和nextval。
SELECT s_test.nextval FROM dual; SELECT s_test.currval FROM dual;
SELECT s_test.nextval,s_test.currval FROM dual;
使用序列填充主键
当表的主键是整数时,通常使用序列来生成主键。通常应该使用NOCACHE,这样可以避免序列产生不连续的情况。但使用NOCHCHE会降低性能。
修改序列
ALTER SEQUENCE语句用来修改序列。
注:不能修改序列的初值。序列的最小值不能大于当前值。序列的最大值不能小于当前值。
ALTER SEQUENCE s_test INCREMENT BY 2;
删除序列
DROP SEQUENCE s_test;