如何拥有自动递增的主键? 例如:当我在字段名称处插入内容时,字段ID应该指定一个与最后一个值相对应的值。
id, name 1, test1 2, test2
所以我插入类似testX的名称,id应自动指定为3
我该怎么做?
答案 0 :(得分:5)
除了回答ain之外,你可以使用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
如果你想要没有洞的数字,你必须非常小心。
生成器/序列是非事务性的 一旦你的操作失败就得到一个值,你就会有一个漏洞。
答案 1 :(得分:4)
如果您使用的是Firebird 3,则可以使用identity column功能:
create table T (
id integer generated by default as identity primary key,
...
);
如果您使用的是某些较旧版本的Firebird,则可以使用带触发器的序列来实现自动增量:
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;
自Firebird 2支持returning clause,这对于获取服务器端生成的id值非常方便。