在 Firebird 数据库中创建自动增量字段的最简单方法

Easiest way to create an auto increment field in Firebird database

是否有使用 Firebird 创建自动递增字段的简单方法?我已经安装了FlameRobin管理工具,但是通过该工具创建自增字段的过程比较复杂。我不能仅通过单击复选框或使用 Flamerobin 以外的其他工具来创建这样的标识字段吗?

Firebird 3 及更高版本

在 Firebird 3 中,它很容易创建,因为它引入了标识列。实际上,它是为您生成序列 + 触发器(如 Firebird 2.5 所示)的语法糖。

例如

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

Firebird 3 仅支持“generated by default”,这意味着用户可以指定自己的 id 值(这可能会导致重复值错误); “generated always”已经 added in Firebird 4

另见 Firebird 3 release notes, section "Identity Column Type", and the Firebird 4.0 Language Reference, section "Identity Columns (Autoincrement)"

Firebird 2.5 及更早版本

Firebird 2.5 及更早版本没有 auto-increment 字段。您需要使用序列(又名生成器)和触发器自己创建它们。

序列是 SQL 标准术语,生成器是 Firebird 的历史术语;这两个术语在 Firebird DDL 语法中都可用。

create a sequence

CREATE SEQUENCE t1_id_sequence;

创建触发器以始终在主键 ID:

的 table 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?

使用 FlameRobin

FlameRobin 还提供工具来为您创建序列 + 触发器。如果您已有 table,您可以按照以下步骤操作:

  1. 打开table属性:

  2. 打开主键列的列属性

  3. 默认列属性,select新生成器创建触发器:

  4. FlameRobin 生成的生成器(序列)和触发器代码。请注意,与我上面的示例相反,此触发器允许用户指定他们自己的 id 值,并使用一些逻辑来避免将来重复。执行这个(不要忘记提交):