除了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)
如果你想要没有洞的数字,你必须非常小心.
生成器/序列是非事务性的.
如果您的操作失败,一旦获得值,您将有一个漏洞.