程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 序列(學習筆記),序列學習筆記

序列(學習筆記),序列學習筆記

編輯:Oracle教程

序列(學習筆記),序列學習筆記


序列的作用

 

許多的數據庫之中都會為用戶提供一種自動增長列的操作 序列(Sequence)可以自動的按照即定的規則實現數據的編號操作 序列的完整創建語法
CREATE SEQUENCE 序列名稱
        [ INCREMENT BY 步長 ]
        [ START WITH 開始值 ]
        [ MAXVALUE 最大值 | NOMAXVALUE ]
        [ MINVALUE 最小值 | NOMINVALUE ]
        [ CYCLE | NOCYCLE ]
        [ CACHE 緩存大小 | NOCACHE ] ;
創建默認序列的語法 CREATE SEQUENCE 序列名稱 示例一、創建一個myseq默認序列
CREATE SEQUENCE myseq
--查詢user_sequence數據字典
SELECT * FROM user_sequences;

各個主要屬性內容如下:
SEQUENCE_NAME:表示序列的名稱,此處的名稱為之前創建的“MYSEQ”;
MIN_VALUE:此序列開始的默認最小值(默認是0);
MAX_VALUE:此序列增長的默認最大值(默認是999999999999999999999999999);
INCREMENT_BY:序列每次增長的步長(默認是1);
CYCLE_FLAG:循環標記,如果是循環序列則顯示“Y”,非循環序列則顯示為“N”(默認是“N”);
CACHE_SIZE:序列操作的緩存量(默認是20);
LAST_NUMBER:最後一次操作的數值;
示例二、通過currvar和nextal屬性操作
--連接執行2次
SELECT myseq.nextval FROM dual;
--當前的序列
SELECT myseq.currval FROM dual;

序列名稱.currval:表示取得當前序列已經增長的結果,重復調用多次後序列內容不會有任何變化,同時當前序列的大小(LAST_NUMBER)不會改變;
序列名稱.nextval:表示取得一個序列的下一次增長值,每調用一次,序列都會自動增長

示例三、使用序列在插入數據時
--創建member表
CREATE TABLE MEMBER(
       mid    NUMBER,
       NAME  VARCHAR2(50)  NOT NULL,
       CONSTRAINT pd_mid PRIMARY KEY(mid)
 );
 --查詢表
 SELECT * FROM MEMBER;
 --插入數據
 INSERT INTO MEMBER(Mid,Name)VALUES(myseq.nextval,'張三豐');
 INSERT INTO MEMBER(Mid,Name)VALUES(myseq.nextval,'張翠山');
 INSERT INTO MEMBER(Mid,Name)VALUES(myseq.nextval,'張無忌');
  --查詢表
 SELECT * FROM MEMBER;
 --發現MID會自動增加

刪除序列

DROP SEQUENCE 序列名

--刪除myseq序列
DROP SEQUENCE myseq;

創建特殊功能的序列

  • 設置序列的增長步長 INCREMENT BY

語法:

CREATE SEQUENCE 序列名 INCREMENT BY 步長

示例四、創建序列步長為3

CREATE SEQUENCE myseq INCREMENT BY 3;
--查詢user_sequences
SELECT * FROM User_Sequences;
--步長已經為3
--調用myseq序列
--連接執行
SELECT myseq.nextval FROM dual;
--查看當前的序列
SELECT myseq.currval FROM dual;
  •  設置序列的初始值START WITH

語法:

 CREATE SEQUENCE 序列名 START WITH 初始值

示例五、創建序初始值為30,每次步長2

 

DROP SEQUENCE myseq;
 CREATE SEQUENCE myseq START WITH 30 INCREMENT BY 2;
 --查詢user_sequences
SELECT * FROM User_Sequences;
--初始值為30,步長已經為2
--調用myseq序列
--連接執行
SELECT myseq.nextval FROM dual;
--查看當前的序列
SELECT myseq.currval FROM dual;

 

  • 設置序列的緩存CACHE |NOCACHE

語法:
CREATE SEQUENCE 序列名稱 CACHE 緩存大小 | NOCACHE

示例六、創建序列,緩存設置為100和不使用緩存

DROP SEQUENCE myseq;
--創建序列使用緩存
CREATE SEQUENCE myseq CACHE 100;
--查詢user_sequences
SELECT * FROM User_Sequences;
--創建序列,不使用緩存
DROP SEQUENCE myseq;
CREATE SEQUENCE myseq NOCACHE;
--測試
SELECT myseq.nextval FROM dual;
  • 設置循環序列

語法:

CREATE SEQUENCE 序列名稱 [ MAXVALUE 序列最大值 | NOMAXVALUE ] [ MINVALUE 序列最小值 | NOMINVALUE ] [ CYCLE | NOCYCLE ] ; 示例七、創建循環序列,讓序列的內容在1、3、5、7、9之間循環
DROP SEQUENCE myseq;
--創建序列
CREATE SEQUENCE myseq
START WITH 1
INCREMENT BY 2
MAXVALUE 10
MINVALUE 1
CYCLE
CACHE 3;
--多次執行
SELECT myseq.nextval FROM dual;

修改序列:

序列本身也屬於一個數據庫的對象,而只要是數據庫的對象,那麼在創建之後都可以對其進行修改,而序列的修改語法如下
ALTER SEQUENCE 序列名稱
        [ INCREMENT BY 步長]
        [ MAXVALUE 最大值 | NOMAXVALUE ]
        [ MINVALUE 最小值 | NOMINVALUE ]
        [ CYCLE | NOCYCLE ]
        [ CACHE 緩存大小 | NOCACHE ] ;

修改和設置方式一樣,只是將CREATE換為了ALTER

Oracle 12C之後提供了自動序列,在創建表中創建

自動序列語法

CREATE TABLE 表名稱 (
        列名稱    類型    GENERATED BY DEFAULT AS IDENTITY ([ INCREMENT BY 步長 ]
                     [ START WITH 開始值 ]
                       [ MAXVALUE 最大值 | NOMAXVALUE ]
                        [ MINVALUE 最小值 | NOMINVALUE ]
                       [ CYCLE | NOCYCLE ]
                       [ CACHE 緩存大小 | NOCACHE ]) ,
        列名稱    類型 ,…
    ) ;
 

示例八、創建帶有自動增長列的數據表

CREATE TABLE mytab(
       mid               NUMBER GENERATED BY DEFAULT AS IDENTITY (START WITH 1 INCREMENT BY 1),
       NAME              VARCHAR2(20)     NOT NULL;
       CONSTRAINT pd_mymid PRIMARY KEY(mid)
       
);

     小結:

 





 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved