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

Oracle 欄位自動遞增實現詳解:Sequence + Trigger 與 Sequence + 顯式調用完整範例

     編輯:Oracle 教學

Oracle 欄位自動遞增實現詳解:Sequence + Trigger 與 Sequence + 顯式調用完整範例

Oracle 不像 MySQL 內建 AUTO_INCREMENT,需自行結合 Sequence 實現。本文提供兩種成熟方案的完整建表、建序列、觸發器/顯式調用腳本,並附序列參數詳細解析,供直接複製套用。

Sequence 參數完整解析

CREATE SEQUENCE seq_name
  [INCREMENT BY n]          -- 步長,預設 1,負值為遞減
  [START WITH n]            -- 起始值,預設 1
  [{MAXVALUE n | NOMAXVALUE}] -- 最大值,遞增預設 10^27
  [{MINVALUE n | NOMINVALUE}] -- 最小值,遞減預設 -10^26
  [{CYCLE | NOCYCLE}]       -- 到達極值是否循環,預設 NOCYCLE
  [{CACHE n | NOCACHE}];    -- 記憶體快取數量,預設 20
  • CACHE:預先在記憶體配號,提升效能;但實例重啟會導致快取內未用號碼跳號(Gap)。
  • NOCACHE:每次取值皆讀寫資料庫,無跳號但效能較差。

方案一:Sequence + BEFORE INSERT Trigger

-- 1. 建立序列
CREATE SEQUENCE SEQ_T_RECV
  MINVALUE 1 MAXVALUE 9999999
  START WITH 1 INCREMENT BY 1 CACHE 50;

-- 2. 建立表
CREATE TABLE RECV_MSG (
  id           NUMBER,
  messageid    VARCHAR2(32),
  contents     VARCHAR2(2000),
  app_flg      VARCHAR2(100),
  phonenumber  VARCHAR2(2000),
  updatetime   DATE DEFAULT SYSDATE
);

-- 3. 建立觸發器
CREATE OR REPLACE TRIGGER recv_trig
  BEFORE INSERT ON recv_msg
  REFERENCING OLD AS OLD NEW AS NEW
  FOR EACH ROW
BEGIN
  SELECT SEQ_T_RECV.NEXTVAL INTO :NEW.id FROM DUAL;
END;

-- 4. 測試驗證
INSERT INTO RECV_MSG (messageid, contents) VALUES ('msg001', 'first');
SELECT * FROM RECV_MSG;  -- id = 1

方案二:Sequence + 顯式調用 .NEXTVAL

-- 1. 建立序列
CREATE SEQUENCE seq_on_test
  INCREMENT BY 1 START WITH 1 NOMAXVALUE NOCYCLE NOCACHE;

-- 2. 建表
CREATE TABLE test (
  ID       INTEGER,
  stu_name NVARCHAR2(4),
  stu_age  NUMBER
);

-- 3. 插入資料
INSERT INTO test VALUES (seq_on_test.NEXTVAL, 'Mary', 15);
INSERT INTO test VALUES (seq_on_test.NEXTVAL, 'Tom', 16);

-- 4. 查詢結果
SELECT * FROM test;
-- 1 Mary 15
-- 2 Tom 16

-- 5. 查詢序列狀態
SELECT seq_on_test.CURRVAL FROM DUAL;  -- 2
SELECT seq_on_test.NEXTVAL FROM DUAL;  -- 3

選型建議

  • 既有系統、不想修改應用程式 INSERT 語句 → Trigger 方案。
  • 新專案、微服務、需跨資料庫移植 → 顯式調用方案 或 Oracle 12c GENERATED AS IDENTITY。
  • 高併發、極致效能要求 → 顯式調用 + CACHE 20+ 或 NOCACHE 視跳號容忍度決定。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved