轉自:http://blog.csdn.net/gameloft9/article/details/20902805緩存
1、概述oracle
sequence是序列號的意思,每次取的時候它會自動增長。sequence與表沒有從屬關係,與表同樣屬於用戶。 2、主要內容 一、Create Sequence語法 --首先用戶要有CREATE SEQUENCE或者CREATE ANY SEQUENCE的權限。 CREATE SEQUENCE seqname [ INCREMENT increment ] [ MINVALUE minvalue ] [ MAXVALUE maxvalue ] [ START start ] [ CACHE cache ] [ CYCLE ][order]性能
seqname: 序列名 increment: 遞增數,例如increment by 1就是遞增1;increment by -1就是遞減1。 minvalue: 序列最小值 maxvalue: 序列最大值,最大爲27個9. start: 序列從哪一個值開始,例如start with 200就是從200開始。 cache: 緩存序列個數,先取一部分序列值存入緩存,能夠提升性能。缺點是發生系統故障後可能致使 序列號不連續。能夠設置爲nocache保證不會發生序列跳動。默認值是20。 cycle: 循環,到達最大值後,從最小值從新開始生成序列號。能夠設置爲nocycle表示累加不循環。 order: 保證按順序申請。默認是noorder。ORDER 和 NOORDER 的區別表如今 並行服務 和獨佔服務之間 打個比方:雙CPU對同一個oracle DB 中的 ABC sequence申請序號時, 這時就有兩個請求A和B,假設A請求在前B在後, 如今ABC序列中的值爲9. 若是添加了ORDER選項,那麼必定是A請求到9, B請求到10.但若是沒有添加此選項,則有可能B請求到9, A請求到10.order通常用於時間戳類型,對於主鍵則用處不大。 例子: CREATE SEQUENCE seq minvalue 1 --最小值 INCREMENT BY 1 --遞增1 START WITH 1 --從1開始 NOMAXvalue --無最大值 NOCYCLE --不循環 CACHE 100; --緩存100個序列號spa
二、使用sequence 定義好sequence後,你就能夠用currVal,nextVal取得值。 CurrVal:返回 sequence的當前值 NextVal:返回sequence的下一個值 select seq.currval from dual select seq.nextval from dual 3.在Sql語句中可使用sequence的地方: (1)不包含子查詢、snapshot、VIEW的 SELECT 語句 (2)INSERT語句的子查詢中.net
(3)INSERT語句的values中 (4)UPDATE 的 SET中 例如: insert into student(id,name) values(seq.Nextval,'jack');blog
注意: 第一次NEXTVAL返回的是初始值,隨後的NEXTVAL會返回增長後的值。CURRVAL 老是返回當前SEQUENCE的值,可是在第一次NEXTVAL初始化以後才能使用CURRVAL,不然報以下錯誤: ORA-08002 序列currval還沒有在會話中定義。rem
使用一次NEXTVAL會增長一次 SEQUENCE的值,因此若是你屢次執行包含NEXTVAL的一條語句,其值就是不同的。 三、修改sequence參數 擁有ALTER ANY SEQUENCE 權限才能改動sequence. 能夠alter除start至之外的全部sequence參數.若是想要改變start值,必須 drop sequence再create。 例: alter sequence SEQ maxvalue 9999999; alter sequence SEQ cache 10; 四、Drop Sequence DROP SEQUENCE seq;it