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

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

Mary-Kate Olsen
リリース: 2025-01-23 23:37:09
オリジナル
965 人が閲覧しました

How to Create Auto-Increment Columns in Oracle Databases?

Oracle の自動インクリメント列: 総合ガイド

バージョン 12c より前の Oracle データベースでは、ネイティブの自動インクリメント列が提供されていませんでした。 ただし、シーケンスとトリガーを使用してこの機能を効果的に複製できます。 Oracle 12c 以降のバージョンでは、True Identity 列が導入され、より合理化されたアプローチが提供されます。

12c より前: シーケンスとトリガーによる自動インクリメントのシミュレーション

自動インクリメント ID が必要なテーブルを作成することから始めましょう:

CREATE TABLE departments (
  ID NUMBER(10) NOT NULL,
  DESCRIPTION VARCHAR2(50) NOT NULL
);
ログイン後にコピー

次に、一意の 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;
ログイン後にコピー

Oracle 12c 以降: ID 列

Oracle 12c ではネイティブ ID 列が導入され、プロセスが大幅に簡素化されました。

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

Oracle 12c の詳細オプション

Oracle 12c ではさらなるカスタマイズが可能です:

  • 開始値と増分値の制御: 開始値と増分値を指定することで、ID 列への手動挿入を防止します:
CREATE TABLE t1 (
  c1 NUMBER GENERATED ALWAYS AS IDENTITY(START WITH 1 INCREMENT BY 1),
  c2 VARCHAR2(10)
);
ログイン後にコピー
  • アイデンティティ列でのシーケンスの使用: シーケンスをデフォルト値ソースとして利用することもできます:
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 データベースの自動インクリメント列を管理するための効率的で柔軟なソリューションを提供します。

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

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