首页 > 代码库 > oracle的sequence序列

oracle的sequence序列

Sequence:序列是一个数据对象,可以用来生成唯一的整数。是数据库里独立的对象,不依赖任何表,为oracle所特有。用来自动生成主键值,可以用sequence的地方:inert语句的子查询中,update的set等。创建序列 :Create sequence seqname

                —increament by 1//每次增长1

                —start with 1//从1开始增长

                —maxvalue 100//最大值是100,nomaxvalue:不设最大值

                —nocycle//一直累加没有循环

                —nocache//没有缓冲

               —省略所有的选项,那么默认是从1开始增,每次增1

       序列的最大值是38位整数,起始值不可以小于最小值

      重点说明:

  1. cache参数是为了应对并发访问的,它告诉oracle预先分配一个sequence number集合,并且保存在内存中,以便可以快速访问。这个内存的大小由cache决定,当多个用户同时访问一个sequence的时候,是在 oracle的SGA中读取sequence当前的合理数值,如果并发访问太大,但cache的大小不过,就会产生sequence cache的相关等待,影响系统性能,简单说 就是缓存。
  2. 使用cache还可能会跳号;比如数据库突然不正常shut down,cache中的sequence就会丢失,可以再创建序列的时候加上nocache来避免。
  3. SGA:系统全局区,是一组包含一个oracle实例的数据和控制信息的共享内存结构,主要是用于存储数据库信息的内存区。
  4. sequence的使用:

              1.nextval:增加sequence的值然后返回sequence值,如果cache,就取cache下一个可用的值;否则取出sequence下一个可用的值。

                 Create table tablename(

                 Id number primary key,

                 Name varchar2

                 );

                Insert into tablename values(seqname.nextval,’xiaoming’);

               查询当前序列:select seqname.nextval from dual;

            2.currval:当前连接最后一次使用序列的值,即:当前序列的值,在第一次nextval初始化之后才能使用,否则报错,select seqname.currval from dual;

           3.修改序列:Alter sequence seqname[increament by][maxval][minval][cycle][cache],注意序列的起始值不可以改变,如果要改,必须先drop掉序列。

           4.删除序列Drop sequence seqname;

注:mysql里的auto_increament类似sequence,

Create table tab2(

Id number not null auto_increment,

Primary key(id)