Firebird的Generator(自动化序列)

 

     它是线程安全的计数器,可以使用create generator 'name' 这种命令来创建,不过它不受事务的控制。

这个数据在存在RDB$GENERATORS的系统表中,GENERATOR_NAME, GENERATOR_ID, SYSTEM_FLAG, DESCRIPTION, DB_KEY这些是表中的字段,(注意:对于用户定义的序列,system_flag是为null或0的,系统内部的都是为1).

     它的值范围是在-9,223,372,036,854,775,808到9,223,372,036,854,775,807.不过firebird的SQL dialect有dialect 1和dialect 3两种选择,在dialect 1下,它的范围是-2,147,483,648到2,147,483,647,如果增长的范围超过了,它就不会继续增长,只停留在这点上,

     并且在客户端的连接中,也可以去设定SQL dialect。这里有一种情况,当firebird对它设置是3的时候,在客户端的连接把它设置为1了,在这种情况下,利用客户端返回的值是以客户端的设置为准的,既在客户端中设置它为1,那在客户端中获取它的范围就是-2,147,483,648到2,147,483,647.

Generate(序列)的极限:


     在数据库中,最多允许创建32767个序列,所以在正常情况下,它是可以任意使用的。

 

Generator的SQL


CREATE GENERATOR <name>;

 

SET GENERATOR <name> TO <value>;

DROP GENERATOR <name>;

获取序列:

SELECT NEXT VALUE FOR <SequenceName> FROM RDB$DATABASE;或

SELECT GEN_ID( <GeneratorName>, <increment> ) FROM RDB$DATABASE;

主要用途


可以创建表的自动增长。也就是给表创建insert时候的触发器,SQL如下:

 

CREATE TRIGGER trgTTEST_BI_V3 for TTEST

active before insert position 0

as

begin

  if ((new.id is null) or (new.id = 0)) then

  begin

    new.id = gen_id( gidTest, 1 );

  end

end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值