web-dev-qa-db-ja.com

Firebirdデータベースに自動インクリメントフィールドを作成する最も簡単な方法

Firebirdを使用して自動インクリメントフィールドを作成する簡単な方法はありますか? FlameRobin管理ツールをインストールしましたが、ツールを使用して自動インクリメントフィールドを作成するプロセスは複雑です。チェックボックスをクリックするか、Flamerobin以外のツールを使用するだけでは、このようなIDフィールドを作成できませんか?

8
gomesh munda

Firebird 2.5以前には、自動インクリメントフィールドがありません。シーケンス(別名ジェネレーター)とトリガーを使用して、自分で作成する必要があります。

シーケンスはSQLの標準用語であり、ジェネレーターはFirebirdの歴史的な用語であり、どちらも使用されます。

宛先 シーケンスを作成

CREATE SEQUENCE t1_id_sequence;

常にテーブルにIDを生成するトリガーを作成するにはT1主キー付きID

set term !! ;
CREATE TRIGGER T1_AUTOINCREMENT FOR T1
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  NEW.ID = next value for t1_id_sequence;
END!!
set term ; !!

参照: 自動インクリメント列を作成する方法?

Firebird 3は、ID列を導入するため、これを少し簡単にします。実際には、シーケンス+トリガーを生成するためのシンタックスシュガーです。

例えば

create table t1 (
   id integer generated by default as identity primary key
)

Firebird3は「generated by default "は、ユーザーが独自のID値を指定できることを意味します(重複値エラーが発生する可能性があります);" generated always "Firebird4が追加されます。

Firebird 3リリースノート のセクション "Identity Column Type"も参照してください。

Flamerobinは、シーケンス+トリガーを作成するためのツールも提供します。既存のテーブルがある場合は、次の手順に従うことができます。

  1. テーブルのプロパティを開きます。

    open table properties

  2. 主キー列の列プロパティを開きます

    open column properties

  3. デフォルトの列プロパティ。新しいジェネレーターcreate triggerを選択します。

    default column properties

  4. Flamerobinによって生成されたジェネレーター(シーケンス)とトリガーコード。上記の私の例とは逆に、このトリガーを使用すると、ユーザーは独自のID値を指定でき、将来の重複を回避するためのロジックがいくつかあります。これを実行します(そしてコミットすることを忘れないでください):

    generated code for generator + trigger

24
Mark Rotteveel