Easiest way to create an auto increment field in F

2019-03-19 10:30发布

Is there an easy way to create auto increment field using Firebird? I have installed the FlameRobin admin tool, but the process of creating an auto increment field through the tool is complex. Can I not create such an identity field just by clicking a checkbox or using some other tool other than Flamerobin?

1条回答
你好瞎i
2楼-- · 2019-03-19 10:49

Firebird 2.5 and earlier do not have auto-increment fields. You need to create them yourself with a sequence (aka generator) and a trigger.

Sequence is the SQL standard term and generator is the historical Firebird term, they are both used.

To create a sequence:

CREATE SEQUENCE t1_id_sequence;

To create a trigger to always generate the id on a table T1 with primary key 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 ; !!

See also: How to create an autoincrement column?

Firebird 3 makes this a little bit easier, as it introduces identity columns. In practice it is syntactic sugar for generating a sequence + trigger for you.

For example

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

Firebird 3 only supports "generated by default", which means users are able to specify their own id values (which might lead to duplicate value errors); "generated always" will be added Firebird 4.

See also the Firebird 3 release notes, section "Identity Column Type".

Flamerobin also provides tooling to create a sequence + trigger for you. If you have an existing table, you can follow these steps:

  1. Open the table properties:

    open table properties

  2. Open the column properties of the primary key column

    open column properties

  3. Default column properties, select new generator and create trigger:

    default column properties

  4. Generator (sequence) and trigger code generated by flamerobin. Note that contrary to my example above this trigger allows a user to specify their own id value, with some logic to avoid future duplicates. Execute this (and don't forget to commit):

    generated code for generator + trigger

查看更多
登录 后发表回答