Oracle 序列(sequence)

时间:2023-03-08 16:04:53

  序列(sequence) 是Oracle提供的用于生成一系列唯一数字的数据库对象。它会自动生成顺序递增或者递减的序列号,以实现自动提供唯一的主键值。序列可以在多用户并发环境中使用,并且可以为所有用户生成不重复的顺序数字,而不需要任何额外的I/O开销。

  序列创建的语法:

  create sequence <seq_name>

  [start with n]

  [increment by n]

  [minvalue n|nominvalue]

  [maxvalue n|nomaxvalue]

  [cache n|nocache]

  [cycle|nocycle]

  [order|noorder]

  

  seq_name: 序列名

  start: 指定序列开始位置 n

  increment by: 表示序列的增量,正数生成一个递增序列,负数生成一个递减序列,默认值为1.

  minvalue: 序列的最小值

  maxvalue: 序列的最大值

  cache: 决定是否是否产生序列号分配,并存储在内存中

  cycle: 当序列达到最大值或者最小值,可以复位并继续下去,如果达到极限则生成的下一个数为最小值或者最大值,如果为nocycle,达到最大值或者最小值,试图获取下一个值时报错

  order: 保证生成的序列是按顺序产生的

  实例:

create sequence seq_test_id
start with 10000
increment by 10
minvalue 1000
maxvalue 1000000
cache 50;

查看当前值与下一个值

select seq_test_id.currval, seq_test_id.nextval from dual;

使用序列 seq_test_id,注意只能用nextval,不能用currval,否则序列不会自增到下一个值

insert into t_test(id, name)
values (seq_test_id.nextval, 'latiny1');

insert into t_test(id, name)
values (seq_test_id.nextval, 'latiny2');

select *
from t_test;

修改序列

alter sequence seq_test_id
maxvalue 10000000
increment by 1000
cache 100;

insert into t_test(id, name)
values (seq_test_id.nextval, 'latiny3');

select *
from t_test;

删除序列

drop sequence seq_test_id;

查询当前用户的序列信息

select *
from user_sequences;