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