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