在 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 generator和create 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 数据库中创建自动增量字段的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章
使用 NetBeans IDE 在 Java DB 中创建自动增量键
dbwritetable 删除 mysql 中的自动增量字段