ホームページ >データベース >mysql チュートリアル >Oracle 11g 以降で自動インクリメント列を作成するにはどうすればよいですか?

Oracle 11g 以降で自動インクリメント列を作成するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-23 23:31:20243ブラウズ

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

Oracle 11g での AUTO_INCREMENT のような列の作成

11g までの Oracle バージョンでは、AUTO_INCREMENT 列タイプはネイティブで使用できません。ただし、同様の機能を実現する代替メカニズムもあります。

シーケンスとトリガーの使用

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 以降のオプションでは、シーケンスをデフォルト値として使用します。列:

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。