SQL主键增量

0 sql firebird

如何拥有自动递增的主键?例如:当我在字段名称处插入内容时,字段ID应该指定一个与最后一个值相对应的值.

id, name
 1, test1
 2, test2

所以我插入类似testX的名称,id应自动指定为3

我怎样才能做到这一点?

Val*_*nov 5

除了ain的答案,你可以使用如下的生成器:

创建一个生成器:

CREATE GENERATOR <name>;
SET GENERATOR <name> TO <value>;
Run Code Online (Sandbox Code Playgroud)

获取生成器的当前值:

SELECT GEN_ID( <GeneratorName>, 0 ) FROM RDB$DATABASE; 
Run Code Online (Sandbox Code Playgroud)

生成下一个值

 SELECT GEN_ID( <GeneratorName>, 1 ) FROM RDB$DATABASE;
Run Code Online (Sandbox Code Playgroud)

在触发器中使用发生器

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
Run Code Online (Sandbox Code Playgroud)

如果你想要没有洞的数字,你必须非常小心.

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