Oracle 原理:序列

 序列是生成唯一的連續序號的對象。有點像SQLServer裏面的種子標識,可以用來實現自增。

CREATE SEQUENCE S_NO    --序列名
START WITH 1            --起始值
INCREMENT BY 1          --自增值
MAXVALUE  200           --最大值
MINVALUE 1              --最小值
NOCYCLE                 --超過最大值是否從頭算起
CACHE 10;               --內存中預先分配的序列號

創建序列需要權限 CREATE SEQUENCE;

CACHE 10 :指的是預先分配的序列號。比如當用戶要取序列 1 時,1~10就會一起生成好,這樣下次取序列2時,就不用先進行計算了,直接取序列2就行。

CREATE SEQUENCE S_NO2    --序列名
START WITH 1            --起始值
INCREMENT BY 1 ;         --自增值

select * from user_sequences

查看自身用戶創建的的序列信息可以用user_sequences ;  查看所有用戶的序列信息可以用 dba_sequences

我們可以看見,各個值的默認值,當沒有指明值的時候,MIN_VALUE默認是1,MAX_VALUE是10^28,不進行循環,CACHE_SIZE爲20;

使用SEQUENCE 時, CURRVAL 獲取當前序列;NEXTVAL 獲取下一個序列;首次使用SEQUENCE時要使用NEXTVAL對序列進行初始化,否則會報錯。

此時再查詢序列 s_no 信息:

發現 LAST_NUMBER 變成了11,因爲你的CACHE_SIZE設成了10

不斷獲取下一個序列,發現在此過程中,S_NO的LAST_NUMBER 一直是11.

當獲取到11時,LAST_NUMBER才變到21。

利用序列實現SQLServer裏邊的種子字段的自增功能,只要insert into 的時候用 s_no.nextval 就行了;

例如,學號通常是由 入學年份和專業代碼還有班級座位號組成的,班級座位號的自動生成就可以使用序列;

 

修改序列:除了START WITH 起始值不能修改,其他都可以被修改

ALTER SEQUENCE S_NO 
Maxvalue 1000 
Cycle  
INCREMENT BY -6;

可以用CREATE OR REPLECE 重建,或者設置 INCREMENT BY 爲 負值,執行以下NEXTVAL也行。

 

   if 序列沒被初始化

     LAST_NUMBER =  Nextval

   else 

     LAST_NUMBER =  下一個進行內存分配的序列號

 

刪除序列:

DROP SEQUENCE [序列名]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章