ホームページ >データベース >mysql チュートリアル >Oracle データベースに自動インクリメント列を作成するにはどうすればよいですか?
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 サイトの他の関連記事を参照してください。