Mysql中主鍵有自增長的特性,而Oracle中,主鍵沒有自增長這個特性,可以使用序列解決該問題,序列主要用于生成主鍵值
CREATE SEQUENCE 序列名
[INCREMENT BY n]--自增長頻率,預設是1
[START WITH n] --定義序列的初始值(即産生的第一個值),預設為1
[{MAXVALUE n| NOMAXVALUE}] --是否指定最大值,預設不指定
[{MINVALUE n| NOMINVALUE}] --是否指定最小值,預設不指定
[{CYCLE|NOCYCLE}]--當序列生成器的值達到限制值後是否循環。CYCLE代表循環,NOCYCLE代表不循環
[{CACHE n| NOCACHE}];--為了加快序列使用效率,每次生成的值都是在緩存中讀取的,預設20,不過20不夠,oracle再生成20個放入緩存
建立一個最簡單的序列
ORACLE中為序列提供了兩個僞列:
1, NEXTVAL 擷取序列對象的下一個值(指針向前移動一個,并且擷取到目前的值。)
2, CURRVAL 擷取序列對象目前的值
序列使用
insert into tstudent(sno,sname,sage,ssex) values(seq_test.nextval,
'哈',33,'女')
結合觸發器使用
create or replace trigger testseq
before insert
on tstudent
for each row
when(new.sno is null) --滿足此條件才使用觸發器,多個條件用and連接配接。
declare
-- local variables here
begin
select seq_test.nextval into :new.sno from dual;
end testseq;
注意
1, 序列是一個共有對象,多個表都可以調用。但實際開發中,可以避免多個表用一個序列(建立多個序列)。序列是獨立的對象。任意表都可以使用,但是編号就不能保證有序。
2,當插入記錄時報錯,序列對象值也被使用,下一次再使用時,序列的值就會+1