序列是生成唯一的連續序號的對象。有點像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 [序列名]