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

Oracle 實作主鍵自動遞增:Sequence + Trigger 兩大模式

     編輯:Oracle 資料庫基礎

模式一:應用層直接呼叫 Sequence

-- 建立序列
CREATE SEQUENCE seq_userid
INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE;

-- 插入時指定
INSERT INTO users (userid, col1, col2) VALUES (seq_userid.NEXTVAL, 'v1', 'v2');

-- 同區塊重用 CURRVAL
INSERT INTO users (userid, col1) VALUES (seq_userid.CURRVAL, 'v3');

-- PL/SQL 變數暫存
SELECT seq_userid.NEXTVAL INTO v_id FROM dual;
-- 後續多處使用 v_id

模式二:Trigger 自動填充 (對應用透明)

CREATE SEQUENCE a_sequence START WITH 1 INCREMENT BY 1;

CREATE TABLE t (n NUMBER, v VARCHAR2(10));

CREATE OR REPLACE TRIGGER t_trg
BEFORE INSERT OR UPDATE ON t
FOR EACH ROW
BEGIN
    SELECT a_sequence.NEXTVAL INTO :NEW.n FROM dual;
END;
/

-- 測試
INSERT INTO t VALUES (111, 'ok');  -- 傳入值會被覆蓋
SELECT * FROM t;  -- n=1

比較與選擇建議

維度應用層 SequenceTrigger 自動
可控性高 (可決定何時取號)低 (隱性行為)
移植性需修改應用 SQL應用無感,遷移友善
效能略優 (無 Trigger 開銷)微小開銷
批次匯入易控制號碼範圍需暫停 Trigger

現代應用建議採用應用層 Sequence,配合 ORM 框架自動處理;舊系統或需資料庫層強制一致性時用 Trigger。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved