oracle中的序列

一、序列:

   自动提供唯一的数值、共享对象、主要用于提供主键值、将序列值装入内存可以提高访问效率。

   也可理解为序列是一个计数器,它并不会与特定的表关联。通过创建Oracle序列实现表的主键自增。

   序列的用途一般用来填充主键和计数。

二、语法:

  创建序列:

      CREATE SEQUENCE 序列名
      [INCREMENT BY n]       --  定义序列的步长  如省略则默认为1、如为负数则递减
      [START WITH n]       --  定义序列的起始值   默认为1
      [{MAXVALUE/ MINVALUE n|NOMAXVALUE}]    定义序列的最大或最小值、给定其范围
      [{CYCLE|NOCYCLE}]             是否循环
      [{CACHE n|NOCACHE}];           是否缓存

  删除序列:

      DROP SEQUENCE 序列名;

三、序列使用

    CURRVAL: 返回序列的当前值。
    NEXTVAL: 序列递增,返回下一值。

、序列的应用

假设有表TEST,其主键为TEST_ID
1)建立递增序列SEQ_TEST:
create sequence SEQ_TEST
increment by 1
start with 1
minvalue 1 nomaxvalue
nocylce

2)建立触发器,当有数据插入表TEST时,使用Oracle序列为其去的递增的主键值
create trigger TRG_TEST before insert on TEST
for each row
begin
select SEQ_TEST.nextval into :new.TEST_ID from dual;
end;

至此,创建完成!

当然也可以不使用触发器,而是在插入时在sql语句中调用序列,例如
insert into TEST values(SEQ_TEST.nextval, ……)

代码如下图:

 
原文地址:https://www.cnblogs.com/mauan/p/7232264.html