2017-03-07 124 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。