Oracle資料庫之序列(sequence)
阿新 • • 發佈:2021-07-28
Oracle資料庫之序列(sequence)
序列是一個計數器,它並不會與特定的表關聯。我們可以通過建立Oracle序列和觸發器實現表的主鍵自增。序列的用途一般用來填充主鍵和計數。
一、建立序列
語法結構:
CREATE SEQUENCE [ schema. ] sequence_name [ { INCREMENT BY | START WITH } integer | { MAXVALUE integer | NOMAXVALUE } | { MINVALUE integer | NOMINVALUE } | { CYCLE | NOCYCLE } | { CACHE integer | NOCACHE } | ... ]... ;
完整語法結構見:http://docs.oracle.com/database/121/SQLRF/statements_6017.htm#SQLRF01314
說明:
- schema:模式,即使用者名稱稱
- sequence_name:序列名稱
- INCREMENT BY:定義序列的步長,如果省略,則預設為1,如果出現負值,則代表Oracle序列的值是按照此步長遞減的。
- START WITH:定義序列的初始值,預設為1。
- MAXVALUE:序列生成器能產生的最大值。NOMAXVALUE是預設選項,代表沒有最大值定義。
- MINVALUE:序列生成器能產生的最小值。NOMINVALUE是預設選項,代表沒有最小值定義。
- CYCLE和NOCYCLE:當序列生成器的值達到限制值後是否迴圈。CYCLE代表迴圈,NOCYCLE代表不迴圈。如果迴圈,則當遞增序列達到最大值時,迴圈到最小值,最小值為1。對於遞減序列達到最小值時,迴圈到最大值。如果不迴圈,達到限制值後,繼續產生新值就會發生錯誤。
- CACHE:定義存放序列的記憶體塊的大小,預設為20,相當於預載入。緩衝部分序列計數以便更快獲取序列值,可以改善序列的效能,但快取選項可能會造成資料丟失。NOCACHE表示不緩衝。
示例:
CREATE SEQUENCE customers_seq START WITH 1000 INCREMENT BY 1 NOCACHE NOCYCLE;
二、刪除序列
語法:
DROP SEQUENCE [ schema. ] sequence_name ;
示例:
DROP SEQUENCE customers_seq;
三、使用序列
序列有兩個屬效能夠獲取序列的值:
CURRVAL:返回序列的當前值。
NEXTVAL:返回序列下一個值。
示例:.
INSERT INTO customers(id) VALUES (customers_seq.NEXTVAL); SELECT customers_seq.CURRVAL FROM dual;
四、修改序列
語法:
ALTER SEQUENCE [ schema. ] sequence_name { INCREMENT BY integer | { MAXVALUE integer | NOMAXVALUE } | { MINVALUE integer | NOMINVALUE } | { CYCLE | NOCYCLE } | { CACHE integer | NOCACHE } | ... } ... ;
完整語法結構見:http://docs.oracle.com/database/121/SQLRF/statements_2014.htm#SQLRF00817
注意,不能修改序列的初始值,否則會報ORA-02283。如果需要修改初始值,先刪除序列再重新建立序列設定初始值。
示例:
ALTER SEQUENCE customers_seq MAXVALUE 1500;
ALTER SEQUENCE customers_seq CYCLE CACHE 5;
五、序列檢視
SELECT * FROM USER_SEQUENCES;
SELECT * FROM ALL_SEQUENCES;
SELECT * FROM DBA_SEQUENCES;
Mysql學習