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

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

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-23 23:37:09903ブラウズ

How to Create Auto-Increment Columns in Oracle Databases?

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

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

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

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

<code class="language-sql">CREATE TABLE departments (
  ID NUMBER(10) NOT NULL,
  DESCRIPTION VARCHAR2(50) NOT NULL
);</code>

次に、一意の ID 値を生成するシーケンスを作成します。

<code class="language-sql">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 以降: ID 列

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

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

Oracle 12c の詳細オプション

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

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

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

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