是否可以定义一个在更新行时自动递增的串行数据类型?

时间:2010-07-05 05:11:22

标签: sql auto-increment informix

将新行添加到包含串行列的表时,在提交行时会为该列分配下一个最高整数值。我可以定义一个串行数据类型,在使用先前分配的序列值更新行时会自动增加吗?在datablade?我目前正在为整数列let intcol = select max(intcol) + 1 from table使用以下功能。在我的应用程序中,当客户产生兴趣pymt时,先前的票号将使用下一个可用的票号进行更新。

3 个答案:

答案 0 :(得分:2)

我认为您需要一个“AFTER UPDATE”触发器,可能还需要一个sequence来避免从表中计算max的开销。

我对Informix一无所知,让我说我理解你的“let intcol ...”语句;)但是例如要用Oracle工具重新创建MySQL's auto increment功能,你需要类似的代码:

create sequence mytable_seq start with 1 increment 1;

create or replace trigger mytable_insert before insert 
for each row
begin
   select mytable_seq.nextval into :new.intcol from dual;
end;

答案 1 :(得分:2)

从我收集到的其他一些问题中,您使用的是一个非常古老的Informix版本。

相对较新的版本(10+,可能稍早)支持SEQUENCE,这将完全符合您的要求:

CREATE SEQUENCE mytable_version 
INCREMENT BY 1 START WITH 1;

然后在您的更新声明中:

UPDATE mytable
SET (payment, version) = (:pymt_amt, mytable_version.next_val)
WHERE ...

每次更新都会导致版本列使用新的序列号进行更新。

如果您的应用程序有太多不同的UPDATE语句或访问方法,您无法控制,您可以考虑将UPDATE版本作为UPDATE触发器的一部分进行。

答案 2 :(得分:0)

对于Oracle,没有。

通常使用预插入触发器和序列完成。