2017-03-07 118 views
0

如何获得自动增量的主键?例如: :当我在字段名称处插入某些内容时,字段标识应该分配一个+1值,即最后一个值。SQL主键增量

 
id, name 
1, test1 
2, test2 

所以我名字一样像testX和ID应该被自动分配为3

我该怎么办呢?如果您使用火鸟一些老的版本,然后使用具有触发的序列可用于实现自动增量

create table T (
    id integer generated by default as identity primary key, 
    ... 
); 

+2

使用服务器端生成器? – MartynA

+0

你为什么要标记这个Q'[delphi]'?这显然是IB /火鸟问题。 –

+0

@FreeConsulting好了,下一个问题将与Delphi相关,他会问哪些库支持INSERT-RETURNING或其他传统方式将自动生成的ID提取回应用程序:-D –

回答

5

除了回答艾因的,你可以使用generator,如:

创建一个发电机:

CREATE GENERATOR <name>; 
SET GENERATOR <name> TO <value>; 

获取发电机的电流值:

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

生成的下一个值

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

使用发电机触发

CREATE OR ALTER trigger <trigger_name>_bi for <table_name> 
active before insert position 0 
as 
begin 
    if (new.id is null) then 
    new.id = gen_id(my_generator,1); 
end 

如果你想记数无你必须要非常小心孔。

发生器/序列是非事务性的。
如果您的操作失败,一旦您获得一个值,您将有一个漏洞。

3

如果您使用火鸟3,那么你可以使用identity column功能:

create table T (
    id integer primary key, 
    ... 
); 

CREATE SEQUENCE t_seq; 

create trigger t_gen_id 
    active before insert 
    on T 
as 
begin 
    if(new.id is null)then new.id = next value for t_seq; 
end; 

由于火鸟2 returning clause支持,这是非常方便的获得值在服务器端生成的ID。