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

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

【问题讨论】:

    标签: field firebird auto-increment


    【解决方案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 还提供工具来为您创建序列 + 触发器。如果您有一个现有的表,您可以按照以下步骤操作:

    1. 打开表格属性:

    2. 打开主键列的列属性

    3. 默认列属性,选择new generatorcreate trigger

    4. 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 我不确定你在问什么。值仅在插入时生成。
    猜你喜欢
    • 2010-10-06
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-08-19
    • 2013-09-23
    • 2018-04-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多