首頁 >資料庫 >mysql教程 >如何在Oracle 11g及更高版本中建立自動遞增列?

如何在Oracle 11g及更高版本中建立自動遞增列?

Linda Hamilton
Linda Hamilton原創
2025-01-23 23:31:20251瀏覽

How to Create Auto-Incrementing Columns in Oracle 11g and Later?

在 Oracle 11g 中建立類似 AUTO_INCRMENT 的欄位

在 Oracle 11g 以下版本中,AUTO_INCRMENT 欄位本身不可用。但是,還有其他機制可以實現類似的功能。

使用序列和觸發器

Oracle 11g中最常見的方法是使用序列和觸發器的組合觸發器:

表格定義:

CREATE TABLE departments (
  ID           NUMBER(10)    NOT NULL,
  DESCRIPTION  VARCHAR2(50)  NOT NULL
);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID)
);

CREATE SEQUENCE dept_seq START WITH 1;

觸發器定義:

CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW
BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
/

此觸發器為新插入的行分配一個唯一的增量值,模仿自動遞增列。

IDENTITY 欄位(Oracle 12c )

在Oracle 12c 及更高版本中,引入了IDENTITY 欄位類型,提供了真正的自增功能:

表格定義:

create table t1 (
    c1 NUMBER GENERATED by default on null as IDENTITY,
    c2 VARCHAR2(10)
);

此定義建立一個列“c1”,該列會隨著插入到的每個新行而自動遞增

或者,您可以指定起始值和增量值:

create table t1 (
    c1 NUMBER GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1),
    c2 VARCHAR2(10)
);

使用序列作為預設值(Oracle 12 )

另一個選項在Oracle 12 及更高版本中,使用序列作為 a 的預設值column:

CREATE SEQUENCE dept_seq START WITH 1;

CREATE TABLE departments (
  ID           NUMBER(10)    DEFAULT dept_seq.nextval NOT NULL,
  DESCRIPTION  VARCHAR2(50)  NOT NULL
);

ALTER TABLE departments ADD (
  CONSTRAINT dept_pk PRIMARY KEY (ID)
);

這種方法使用序列分配增量值,但實際的增量操作由資料庫管理。

以上是如何在Oracle 11g及更高版本中建立自動遞增列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn