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

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

DDD
DDDオリジナル
2025-01-23 23:21:53536ブラウズ

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

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

Oracle Database では、他のデータベース システムとは異なり、バージョン 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>

ID 列 (Oracle 12c 以降)

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

<code class="language-sql">CREATE TABLE t1 (
  c1 NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY,
  c2 VARCHAR2(10)
);</code>

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

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

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