Sequence是數據庫系統按照一定的規則自動增加的數字序列,主要用於生成數據庫數據記錄。這個序列一般作為代理主鍵(因為不會重復)。
Sequence是數據中一個特殊存放等差數列的表,該表受數據庫系統控制,任何時候數據庫系統都可以根據當前記錄數大小加上步長來獲取到該表下一條記錄應該是多少,這個表沒有實際意義,常常用來做主鍵用。Sequence是數據庫系統的特性,有的數據庫有Sequence,有的沒有。比如Oracle、DB2、PostgreSQL數據庫有Sequence,MySQL、SQL Server、Sybase等數據庫則沒有Sequence。
此處,主要討論下oracle sequence的創建與使用,其他的大同小異。
Create Sequence之前要獲取CREATE SEQUENCE或者CREATE ANY SEQUENCE權限。
1 -- Create sequence 2 create sequence SEQ_PRODUCT_STANDARD_CHG --Sequence實例名 3 minvalue 1 --最小值,可以設置為0 4 maxvalue 2147483647 --最大值 5 start with 1 --從1開始計數 6 increment by 1 --每次加幾個 7 cache 20; --設置緩存cache個序列,如果系統down掉了或者其它情況將會導致序列不連續,也可以設置為---------NOCACHE
或者可以如下創建均是可以的
1 CREATE SEQUENCE SEQ_PRODUCT_STANDARD_CHG 2 START WITH 1 -- 從1開始計數 3 NOMAXvalue -- 不設置最大值 4 INCREMENT BY 1 -- 每次加幾個 5 NOCYCLE -- 一直累加,不循環 6 CACHE 10; --設置緩存cache個序列,如果系統down掉了或者其它情況將會導致序列不連續,也可以設置為---------NOCACHE
創建好Sequence後就可以通過currVal與nextVal進行使用。
currVal:返回 sequence的當前值
nextVal: 增加sequence的值,然後返回 增加後sequence值
如得到上邊創建Sequence值的語句為(其中kingstar為用戶,該用戶下其實可以省略):
1 select kingstar.SEQ_PRODUCT_STANDARD_CHG.currVal 2 from dual
在Sql語句中可以使用sequence的地方:
注:1.CURRVAL 總是返回當前SEQUENCE的值,但是在第一次NEXTVAL初始化之後才能使用CURRVAL,否則會出錯。
2. 第一次NEXTVAL返回的是初始值;隨後的NEXTVAL會自動增加你定義的INCREMENT BY值,然後返回增加後的值。
擁有ALTER ANY SEQUENCE 權限才能改動sequence. 可以alter除start至以外的所有sequence參數.如果想要改變start值,必須 drop sequence 再 re-create。
1 alter sequence kingstar.SEQ_PRODUCT_STANDARD_CHG maxvalue 9999999;
1 ALTER SEQUENCE kingstar.SEQ_PRODUCT_STANDARD_CHG 2 INCREMENT BY 10 3 MAXVALUE 10000 4 CYCLE — 到10000後從頭開始 5 NOCACHE ;
1 DROP SEQUENCE kingstar.SEQ_PRODUCT_STANDARD_CHG;