概述
Oracle的sequence,就是序列号,它提供一系列的按照事先指定的方式进行增长的数字。oracle sequence的最大值是38个整数。【 Sequences are database objects from which multiple users can generate unique integers.】。一般来说,sequence常用于生成数据库的主键。
Oracle将sequence的定义存储在数据字典之中,因此,所有的sequence都在数据库的SYSTEM表空间里面。
引用sequence的当前值使用CURRVAL,而生成sequence的下一个值使用NEXTVAL来实现。初始化一个刚刚新建的sequence使用NEXTVAL,它会返回新sequence的第一值。另外还要注意,在一个全新的会话中,使用CURRVAL之前必须至少使用一次NEXTVAL。
sequence是独立于表的,也就是说一个sequence可以同时被多个表使用来生成主键。
sequence是独立于事务的,就是说序列的增加不需要等待事务的完成,也就是说二手游戏账号拍卖序列是异步于事务而增长的。这种现象就说明,如果你根本访问不了别的用户用sequence产生的值,也就是说你只能访问到你当前产生的值,即使其他用户已经增加了sequence的值;还说明如果你事务回滚,sequence不会回滚,它所发生的改变是一维的。请看一个例子:
-- session 1
SQL> select distinct sid from v$mystat;
SID
----------
147
SQL> create sequence seqtest;
Sequence created.
SQL> select seqtest.nextval from dual; -- 第一次初始化sequence
NEXTVAL
----------
1
SQL> select seqtest.nextval from dual;
NEXTVAL