許多的數據庫之中都會為用戶提供一種自動增長列的操作 序列(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;
創建特殊功能的序列
語法:
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;
語法:
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;
語法:
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
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)
);
小結: