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

Oracle 實現自增主鍵:Sequence + Trigger 完整範例與最佳實踐

     編輯:Oracle 資料庫基礎

Oracle 無原生 AUTO_INCREMENT,標準做法:Sequence 產生值 + Before Insert Trigger 填入。本文提供完整可執行範例與進階選項說明。

基礎三步驟

-- 1. 建表
CREATE TABLE example (
  id      NUMBER(4) PRIMARY KEY,
  name    VARCHAR2(25),
  phone   VARCHAR2(10),
  address VARCHAR2(50)
);

-- 2. 建立 Sequence
CREATE SEQUENCE emp_seq
  INCREMENT BY 1
  START WITH 1
  NOMAXVALUE
  NOCYCLE
  NOCACHE;  -- 若允許跳號可用 CACHE 20 提升效能

-- 3. 建立 Trigger
CREATE OR REPLACE TRIGGER example_bir
BEFORE INSERT ON example
FOR EACH ROW
WHEN (NEW.id IS NULL)
BEGIN
  SELECT emp_seq.NEXTVAL INTO :NEW.id FROM dual;
END;
/

驗證

INSERT INTO example (name, phone, address) VALUES ('Cao', '56498543', 'Heibei');
INSERT INTO example (name, phone, address) VALUES ('Liu', '56498544', 'Beijing');
SELECT * FROM example;
-- ID 將自動為 1, 2...

Sequence 進階選項

子句說明
INCREMENT BY n每次遞增量(可負數)
START WITH n初始值
MAXVALUE n / NOMAXVALUE上限 / 無上限(預設 10^27)
CYCLE / NOCYCLE達上限後循環 / 報錯
CACHE n / NOCACHE預先在 SGA 緩存 n 個值(效能佳但 Crash 會跳號)
ORDER / NOORDERRAC 環境下保證全域有序 / 不保證

常用操作

  • 取得下一值:emp_seq.NEXTVAL
  • 取得當前值:emp_seq.CURRVAL(需先在 Session 呼叫過 NEXTVAL)
  • 修改參數:ALTER SEQUENCE emp_seq INCREMENT BY 10 MAXVALUE 10000 CYCLE;
  • 刪除:DROP SEQUENCE emp_seq;

效能與間隙權衡

  • 高併發 OLTP:建議 CACHE 100~1000 + NOORDER,接受極少數跳號。
  • 稽核要求連號:NOCACHE + ORDER,效能較低但無間隙。
  • 12c+ 可用 IDENTITY COLUMN 簡化語法:id NUMBER GENERATED ALWAYS AS IDENTITY。
Sequence + Trigger 是 Oracle 經典自增模式,理解 CACHE/ORDER 權衡,才能在效能與合規間找到平衡點。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved