首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Sequence 序列建立與使用完整教學

     編輯:Oracle 資料庫基礎

一、建立 Sequence

CREATE SEQUENCE myid
    INCREMENT BY 1      -- 每次遞增值
    START WITH 1        -- 起始值
    NOMAXVALUE          -- 無上限
    NOCYCLE             -- 不循環
    CACHE 10;           -- 記憶體預載 10 個值,提升效能

參數說明

參數說明預設值
INCREMENT BY遞增間距(可負數遞減)1
START WITH第一個產生的值1
MAXVALUE / NOMAXVALUE上限值 / 無上限NOMAXVALUE
MINVALUE / NOMINVALUE下限值 / 無下限NOMINVALUE
CYCLE / NOCYCLE達上限後是否循環NOCYCLE
CACHE / NOCACHE記憶體預載數量 / 不預載CACHE 20
ORDER / NOORDERRAC 環境下是否保證跨節點有序NOORDER

二、使用 Sequence

取得下一值

INSERT INTO stu VALUES (myid.NEXTVAL, 'lili');

查看當前值

SELECT myid.CURRVAL FROM DUAL;

三、可使用 Sequence 的場合

  • 不含子查詢、Snapshot、View 的 SELECT 陳述式
  • INSERT 子查詢
  • INSERT VALUES 子句
  • UPDATE SET 子句

四、重要行為與注意事項

  1. 首次 NEXTVAL 回傳 START WITH 值;後續每次呼叫遞增 INCREMENT BY 並回傳新值。
  2. CURRVAL 僅在該 Session 執行過 NEXTVAL 後可用,否則報 ORA-08002。
  3. 同一陳述式中多次呼叫 NEXTVAL,每次皆遞增並回傳不同值。
  4. CACHE 可能導致跳號:異常關機(SHUTDOWN ABORT)會遺失記憶體中未使用的快取值。需連續號碼時請指定 NOCACHE。

五、修改 Sequence

ALTER SEQUENCE myid
    INCREMENT BY 10
    MAXVALUE 10000
    CYCLE
    NOCACHE;

無法修改 START WITH,需 DROP SEQUENCE 後重建。

六、刪除 Sequence

DROP SEQUENCE order_seq;

七、初始化參數

SEQUENCE_CACHE_ENTRIES:控制同時可快取的 Sequence 數量。

八、實務建議

  • 主鍵產生器首選 Sequence,效能優於觸發器+表模擬。
  • 高併發插入場景建議 CACHE 100 以上,減少 Row Cache Lock 爭用。
  • 帳務、發票等嚴禁跳號業務務必 NOCACHE 或改用 ORDER 保證有序。
  • 定期查詢 USER_SEQUENCES 監控 LAST_NUMBER 接近 MAXVALUE 狀況。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved