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

Posted

技术标签:

【中文标题】在 Firebird 数据库中创建自动增量字段的最简单方法【英文标题】:Easiest way to create an auto increment field in Firebird database 【发布时间】:2016-04-05 20:42:00 【问题描述】:

有没有一种简单的方法可以使用 Firebird 创建自动增量字段?我已经安装了 FlameRobin 管理工具,但是通过该工具创建自动增量字段的过程很复杂。我不能只通过单击复选框或使用 Flamerobin 以外的其他工具来创建这样的身份字段吗?

【问题讨论】:

【参考方案1】:

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,“身份列类型”部分。

Firebird 2.5 及更早版本

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

Sequence 是 SQL 标准术语,generator 是历史 Firebird 术语;这两个术语都可以在 Firebird DDL 语法中使用。

致create a sequence:

CREATE SEQUENCE t1_id_sequence;

要创建一个触发器以始终在表 T1 上生成 id,主键为 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 还提供工具来为您创建序列 + 触发器。如果您有一个现有的表,您可以按照以下步骤操作:

    打开表格属性:

    打开主键列的列属性

    默认列属性,选择new generatorcreate trigger

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

【讨论】:

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) 也许是因为我不是 DBA,但这仅适用于 INSERT 语句,对吗?这对UPDATE 来说没有问题吧? @searchengine27 我不确定你在问什么。值仅在插入时生成。

以上是关于在 Firebird 数据库中创建自动增量字段的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章

FireBird 数据库 自动增长列怎么实现的?请高手

使用 NetBeans IDE 在 Java DB 中创建自动增量键

dbwritetable 删除 mysql 中的自动增量字段

在 Firebird 脚本中创建表会导致“元数据更新失败”并出现死锁

德尔福火鸟汽车

如何在 Oracle 11g 中创建自动增量?