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

Oracle データベースに自動インクリメント列を作成するにはどうすればよいですか?

DDD
リリース: 2025-01-23 23:21:53
オリジナル
600 人が閲覧しました

How Do I Create Auto-Incrementing Columns in Oracle Databases?

Oracle データベースの自動インクリメント列

Oracle Database では、他のデータベース システムとは異なり、バージョン 11g までは列を自動インクリメントする概念がありませんでした。これにより、自動インクリメント識別子を必要とするテーブルを作成するときに問題が発生する可能性があります。幸いなことに、シーケンスとトリガーを使用してこの動作をシミュレートできます。

シーケンスとトリガーを使用したシミュレーション

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;
ログイン後にコピー

次に、新しいレコードが挿入されたときに ID 列にシーケンスの次の値を設定するトリガーを作成します。

CREATE OR REPLACE TRIGGER dept_bir
BEFORE INSERT ON departments
FOR EACH ROW

BEGIN
  SELECT dept_seq.NEXTVAL
  INTO   :new.id
  FROM   dual;
END;
ログイン後にコピー

ID 列 (Oracle 12c 以降)

Oracle 12c 以降、ID 列が真の自動インクリメント機能として導入されました。次のようにテーブルに ID 列を定義できます:

CREATE TABLE t1 (
  c1 NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
  c2 VARCHAR2(10)
);
ログイン後にコピー

ID 列では、手動更新を防ぐために開始値と増分値を指定することもできます:

CREATE TABLE t1 (
  c1 NUMBER GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1),
  c2 VARCHAR2(10)
);
ログイン後にコピー

デフォルト値の代わりにシーケンスを使用する

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
);
ログイン後にコピー

以上がOracle データベースに自動インクリメント列を作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート