oracle 序列詳解
Oracle 序列詳解
一 序列定義
序列(SEQUENCE)是序列號生成器,可以為表中的行自動生成序列號,產生一組等間隔的數值(型別為數字)。不佔用磁碟空間,佔用記憶體。
其主要用途是生成表的主鍵值,可以在插入語句中引用,也可以透過查詢檢查當前值,或使序列增至下一個值。
二 建立序列
建立序列需要CREATE SEQUENCE系統許可權。序列的建立語法如下:
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE/ MINVALUE n| NOMAXVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n| NOCACHE}];
其中:
1) INCREMENT BY用於定義序列的步長,如果省略,則預設為1,如果出現負值,則代表Oracle序列的值是按照此步長遞減的。
2) START WITH 定義序列的初始值(即產生的第一個值),預設為1。
3) MAXVALUE 定義序列生成器能產生的最大值。選項NOMAXVALUE是預設選項,代表沒有最大值定義,這時對於遞增Oracle序列,系統能夠產生的最大值是10的27次方;對於遞減序列,最大值是-1。
4) MINVALUE定義序列生成器能產生的最小值。選項NOMAXVALUE是預設選項,代表沒有最小值定義,這時對於遞減序列,系統能夠產生的最小值是?10的26次方;對於遞增序列,最小值是1。
5) CYCLE和NOCYCLE 表示當序列生成器的值達到限制值後是否迴圈。CYCLE代表迴圈,NOCYCLE代表不迴圈。如果迴圈,則當遞增序列達到最大值時,迴圈到最小值;對於遞減序列達到最小值時,迴圈到最大值。如果不迴圈,達到限制值後,繼續產生新值就會發生錯誤。
6) CACHE(緩衝)定義存放序列的記憶體塊的大小,預設為20。NOCACHE表示不對序列進行記憶體緩衝。對序列進行記憶體緩衝,可以改善序列的效能。
大量語句發生請求,申請序列時,為了避免序列在運用層實現序列而引起的效能瓶頸。Oracle序列允許將序列提前生成 cache x個先存入記憶體,在發生大量申請序列語句時,可直接到執行最快的記憶體中去得到序列。但cache個數也不能設定太大,因為在資料庫重啟時,會清空記憶體資訊,預存在記憶體中的序列會丟失,當資料庫再次啟動後,序列從上次記憶體中最大的序列號+1 開始存入cache x個。這種情況也能會在資料庫關閉時也會導致序號不連續。
7) NEXTVAL 返回序列中下一個有效的值,任何使用者都可以引用。
8) CURRVAL 中存放序列的當前值,NEXTVAL 應在 CURRVAL 之前指定 ,二者應同時有效。
例子:
SQL> create sequence t1_seq increment by 1 start with 1;
三 使用序列
呼叫NEXTVAL將生成序列中的下一個序列號,呼叫時要指出序列名,即用以下方式呼叫: 序
列名.NEXTVAL
CURRVAL用於產生序列的當前值,無論呼叫多少次都不會產生序列的下一個值。如果序列還
沒有透過呼叫NEXTVAL產生過序列的下一個值,先引用CURRVAL沒有意義。呼叫CURRVAL
的方法同上,要指出序列名,即用以下方式呼叫:序列名.CURRVAL
SQL> create table t1(id number,qq number,ww number);
SQL> insert into t1 values(t1_seq.nextval,1,1);
1 row created.
SQL> /
1 row created.
SQL> /
SQL> /
SQL> /
1 row created.
SQL> select * from t1;
ID QQ WW
---------- ---------- ----------
1 1 1
2 1 1
3 1 1
4 1 1
5 1 1
SQL> select t1_seq.currval from dual;
CURRVAL
----------
5
SQL> select t1_seq.nextval from dual;
NEXTVAL
----------
6
SQL> select t1_seq.nextval from dual;
NEXTVAL
----------
7
四 修改序列
修改序列的注意事項:
1 必須是序列的擁有者或對序列有 ALTER any sequence許可權
2 只有將來的序列值會被改變
3 改變序列的初始值只能透過刪除序列之後重建序列的方法實現
Alter sequence示例:
ALTER SEQUENCE emp_sequence INCREMENT BY 10 MAXVALUE 10000 CYCLE -- 到10000後從頭開始 NOCACHE ;
可以影響Sequence的初始化引數:
SEQUENCE_CACHE_ENTRIES =設定能同時被cache的sequence數目。
SQL> alter sequence t1_seq increment by 2 maxvalue 10 cycle;
alter sequence t1_seq increment by 2 maxvalue 10 cycle
*
ERROR at line 1:
ORA-04013: number to CACHE must be less than one cycle
SQL> alter sequence t1_seq increment by 2 maxvalue 40 cycle;
Sequence altered.
SQL> insert into t1 values(t1_seq.nextval,1,1);
/
/
……….
/
SQL> select * from t1;
ID QQ WW
---------- ---------- ----------
1 1 1
2 1 1
3 1 1
4 1 1
5 1 1
9 1 1
11 1 1
13 1 1
15 1 1
17 1 1
………………………………………………..
37 1 1
39 1 1
1 1 1
3 1 1
5 1 1
24 rows selected.
五 查詢序列
1 透過資料字典USER_OBJECTS可以檢視使用者擁有的序列。
2 透過資料字典USER_SEQUENCES可以檢視序列的設定。
例:檢視使用者的序列:
SELECT SEQUENCE_NAME,MIN_VALUE,MAX_VALUE,INCREMENT_BY,LAST_NUMBER FROM USER_SEQUENCES;
執行結果:
SEQUENCE_NAME MIN_VALUE MAX_VALUE INCREMENT_BY LAST_NUMBER
SQL> select object_name,object_type from user_objects;
OBJECT_NAM OBJECT_TYPE
---------- -------------------
T1_SEQ SEQUENCE
T1 TABLE
SQL> select sequence_name,increment_by,cycle_flag,cache_size from user_sequences;
SEQUENCE_N INCREMENT_BY CYCLE_FLAG CACHE_SIZE
---------- ------------ ---------- ----------
T1_SEQ 2 Y 20
六 刪除序列
SQL> drop sequence t1_seq;
歡迎關注我的微信公眾號"IT小Chen",共同學習,共同成長!!!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29785807/viewspace-1273138/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle 序列 詳解Oracle
- 詳解序列(sequence)
- Python3序列賦值、序列解包詳解(下)Python賦值
- Java序列化(Serializable)與反序列化詳解Java
- Django序列化元件Serializers詳解Django元件
- 17. 字串詳解及序列型別字串型別
- 解決Oracle序列跳號問題Oracle
- Oracle序列Oracle
- oracle 序列Oracle
- JavaScript 鏈式結構序列化詳解JavaScript
- oracle之 Oracle LOB 詳解Oracle
- oracle dump詳解Oracle
- oracle INVENTORY 詳解Oracle
- oracle recyclebin詳解Oracle
- ORACLE -詳解SCNOracle
- Oracle SCN詳解Oracle
- Oracle checkpoint詳解Oracle
- Oracle Hints詳解Oracle
- oracle statspack詳解Oracle
- Oracle ASM 詳解OracleASM
- oracle statspack 詳解Oracle
- Oracle bootstrap$ 詳解Oracleboot
- Oracle PGA詳解Oracle
- oracle Dataguard 詳解Oracle
- Oracle Hint 詳解Oracle
- JDK7u21反序列化詳解JDK
- Serializable詳解(1):程式碼驗證Java序列化與反序列化Java
- Oracle - Sequence序列Oracle
- Oracle序列sequenceOracle
- oracle之序列Oracle
- ORACLE的HINT詳解Oracle
- oracle rowid詳解Oracle
- Oracle dblink詳解Oracle
- ORACLE DBTime詳解Oracle
- oracle v$lock詳解Oracle
- Oracle練習詳解Oracle
- oracle alter table詳解Oracle
- Oracle dual表 詳解Oracle