2016-01-01 19 views
5

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

答えて

16

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

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

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 ; !! 

も参照してください:How to create an autoincrement column?

火の鳥3はこれを少し簡単にしますID列実際には、シーケンス+トリガを生成するための構文的な砂糖です。例えば

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

Firebirdの3ユーザーのみが(値の誤差が重複する可能性があります)自分のID値を指定することが可能であることを意味する、「generated by default」をサポートします。 "generated always"が追加されます。

Firebird 3 release notesセクション「アイデンティティ列タイプ」も参照してください。

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

  1. オープンテーブルプロパティ:

    open table properties

  2. を開き、主キー列

    open column properties

    の列のプロパティ
  3. デフォルトの列のプロパティは、newを選択します。 flamerobinによって生成

    default column properties

  4. ジェネレータ(配列)及びトリガーコード:ジェネレータトリガを作成します。上記の私の例とは対照的に、このトリガーは、ユーザが独自のid値を指定することを可能にし、将来の重複を避けるためにいくつかのロジックを持つことに注意してください。これを実行する(コミットすることを忘れないでください):

    generated code for generator + trigger

+1

正確な答えを。ありがとう@マーク:) –

関連する問題