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

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

Linda Hamilton
發布: 2025-01-23 23:31:20
原創
288 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板