Oracle序列sequence 深入理解

來源:互聯網
上載者:User

Oracle序列sequence 深入理解

Oracle序列:序列(Sequence)建立、使用、修改、刪除,序列(Sequence)是用來產生連續的整數資料的對象。序列常常用來作為主鍵中增長列,序列中的可以升序產生,也可以降序產生。

文法:建立序列
CREATE SEQUENCE sequence_name
[START WITH num]
[INCREMENT BY increment]
[MAXVALUE num|NOMAXVALUE]
[MINVALUE num|NOMINVALUE]
[CYCLE|NOCYCLE]
[CACHE num|NOCACHE]

文法解析:
 START WITH:從某一個整數開始,升序預設值是1,降序預設值是-1。
 INCREMENT BY:增長數。如果是正數則升序產生,如果是負數則降序產生。升序預設值是1,降序預設值是-1。
 MAXVALUE:指最大值。
 NOMAXVALUE:這是最大值的預設選項,升序的最大值是:1027,降序預設值是-1。
 MINVALUE:指最小值。
 NOMINVALUE:這是預設值選項,升序預設值是1,降序預設值是-1026。
 CYCLE:表示如果升序達到最大值後,從最小值重新開始;如果是降序序列,達到最小值後,從最大值重新開始。
 NOCYCLE:表示不重新開始,序列升序達到最大值、降序達到最小值後就報錯。預設NOCYCLE。
 CACHE:使用CACHE選項時,該序列會根據序列規則預產生一組序號。保留在記憶體中,當使用下一個序號時,可以更快的響應。當記憶體中的序號用完時,系統再產生一組新的序號,並儲存在緩衝中,這樣可以提高產生序號的效率。Oracle預設會生產20個序號。
 NOCACHE:不預先在記憶體中產生序號。

 

案例2:建立一個從1開始,預設最大值,每次增長1的序列,要求NOCYCLE,緩衝中有30個預先分配好的序號。

代碼示範:產生序號

SQL> CREATE SEQUENCE MYSEQ
    MINVALUE 1
    START WITH 1 
    NOMAXVALUE
    INCREMENT BY 1
    NOCYCLE
    CACHE 30
      /

Sequence created

序列建立之後,可以通過序列對象的CURRVAL和NEXTVAL兩個“偽列”分別訪問該序列的當前值和下一個值。

使用序列:

SQL> SELECT MYSEQ.NEXTVAL FROM DUAL;

NEXTVAL

----------

  1

SQL> SELECT MYSEQ.NEXTVAL FROM DUAL;

NEXTVAL

----------

2

SQL> SELECT MYSEQ.CURRVAL FROM DUAL;

CURRVAL

----------

  2

使用ALTER SEQUENCE可以修改序列,在修改序列時有如下限制:
你或者是該sequence的owner,或者有ALTER ANY SEQUENCE 許可權才能改動sequence. 可以alter除start至以外的所有sequence參數.如果想要改變start值,必須 drop  sequence 再 re-create . 

1. 不能修改序列的初始值。
2. 最小值不能大於當前值。
3. 最大值不能小於當前值。

使用DROP SEQUENCE命令可以刪除一個序列對象。


序列修改和刪除

SQL> ALTER SEQUENCE MYSEQ
    MAXVALUE 10000 
    MINVALUE -300 
    /
 
SEQUENCE ALTERED

刪除:
SQL> DROP SEQUENCE MYSEQ;

SEQUENCE DROPPED

 Oracle序列:序列(Sequence)建立、使用、修改、刪除,序列(Sequence)是用來產生連續的整數資料的對象。序列常常用來作為主鍵中增長列,序列中的可以升序產生,也可以降序產生。

文法:建立序列
CREATE SEQUENCE sequence_name
[START WITH num]
[INCREMENT BY increment]
[MAXVALUE num|NOMAXVALUE]
[MINVALUE num|NOMINVALUE]
[CYCLE|NOCYCLE]
[CACHE num|NOCACHE]

文法解析:
 START WITH:從某一個整數開始,升序預設值是1,降序預設值是-1。
 INCREMENT BY:增長數。如果是正數則升序產生,如果是負數則降序產生。升序預設值是1,降序預設值是-1。
 MAXVALUE:指最大值。
 NOMAXVALUE:這是最大值的預設選項,升序的最大值是:1027,降序預設值是-1。
 MINVALUE:指最小值。
 NOMINVALUE:這是預設值選項,升序預設值是1,降序預設值是-1026。
 CYCLE:表示如果升序達到最大值後,從最小值重新開始;如果是降序序列,達到最小值後,從最大值重新開始。
 NOCYCLE:表示不重新開始,序列升序達到最大值、降序達到最小值後就報錯。預設NOCYCLE。
 CACHE:使用CACHE選項時,該序列會根據序列規則預產生一組序號。保留在記憶體中,當使用下一個序號時,可以更快的響應。當記憶體中的序號用完時,系統再產生一組新的序號,並儲存在緩衝中,這樣可以提高產生序號的效率。Oracle預設會生產20個序號。
 NOCACHE:不預先在記憶體中產生序號。

 

案例2:建立一個從1開始,預設最大值,每次增長1的序列,要求NOCYCLE,緩衝中有30個預先分配好的序號。

代碼示範:產生序號

SQL> CREATE SEQUENCE MYSEQ
    MINVALUE 1
    START WITH 1 
    NOMAXVALUE
    INCREMENT BY 1
    NOCYCLE
    CACHE 30
      /

Sequence created

序列建立之後,可以通過序列對象的CURRVAL和NEXTVAL兩個“偽列”分別訪問該序列的當前值和下一個值。

使用序列:

SQL> SELECT MYSEQ.NEXTVAL FROM DUAL;

NEXTVAL

----------

  1

SQL> SELECT MYSEQ.NEXTVAL FROM DUAL;

NEXTVAL

----------

2

SQL> SELECT MYSEQ.CURRVAL FROM DUAL;

CURRVAL

----------

  2

使用ALTER SEQUENCE可以修改序列,在修改序列時有如下限制:
你或者是該sequence的owner,或者有ALTER ANY SEQUENCE 許可權才能改動sequence. 可以alter除start至以外的所有sequence參數.如果想要改變start值,必須 drop  sequence 再 re-create . 

1. 不能修改序列的初始值。
2. 最小值不能大於當前值。
3. 最大值不能小於當前值。

使用DROP SEQUENCE命令可以刪除一個序列對象。

序列修改和刪除

SQL> ALTER SEQUENCE MYSEQ
    MAXVALUE 10000 
    MINVALUE -300 
    /
 
SEQUENCE ALTERED

刪除:
SQL> DROP SEQUENCE MYSEQ;

SEQUENCE DROPPED

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.