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, ……)
代码如下图: