Oracle 資料庫中的自動遞增列
在 Oracle 資料庫中,與其他資料庫系統不同,直到 11g 版本之前,都不存在自動遞增列的概念。這在建立需要自動遞增標識符的表時會帶來挑戰。幸運的是,可以使用序列和觸發器來模擬這種行為。
使用序列和觸發器進行模擬
在 Oracle 11g 及更早版本中,您可以建立序列和觸發器來模擬自動遞增列。首先,定義一個包含用作識別符的數值列的表:
<code class="language-sql">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;</code>
接下來,建立一個觸發器,在插入新記錄時使用序列的下一個值填充 ID 列:
<code class="language-sql">CREATE OR REPLACE TRIGGER dept_bir BEFORE INSERT ON departments FOR EACH ROW BEGIN SELECT dept_seq.NEXTVAL INTO :new.id FROM dual; END;</code>
識別列 (Oracle 12c 及更高版本)
從 Oracle 12c 開始,引入了識別列作為真正的自動遞增功能。您可以如下在表格中定義識別列:
<code class="language-sql">CREATE TABLE t1 ( c1 NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY, c2 VARCHAR2(10) );</code>
識別列也可以指定起始值和增量值以防止手動更新:
<code class="language-sql">CREATE TABLE t1 ( c1 NUMBER GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1), c2 VARCHAR2(10) );</code>
使用序列作為預設值的替代方法
Oracle 12 也提供了一種使用序列作為預設值的方法:
<code class="language-sql">CREATE SEQUENCE dept_seq START WITH 1; CREATE TABLE departments ( ID NUMBER(10) DEFAULT dept_seq.NEXTVAL NOT NULL, DESCRIPTION VARCHAR2(50) NOT NULL );</code>
以上是如何在Oracle資料庫中建立自動遞增列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!