informix自10开始可以产生序列(sequence)。序列(sequence)有时候也被叫做序列产生器(sequencegenerator)或序列对象(sequence object)。它产生一个单调增或单调减的整数序列。
创建序列:
CREATE SEQUENCE seq_2 INCREMENT BY1 START WITH 1
MAXVALUE30
MINVALUE 0
NOCYCLE
CACHE10
ORDER; 上面示例中创建了一个名为seq_2的序列,该序列产生从1到30的单调递增1的整数,如果大小超过30则报8313(超过最大值)错误。这里的NOCYCLE选项表示如果产生的整数大于最大值后则停止生成整数,若设为CYCLE则将从开始值重新开始生成数据。改变序列:
ALTERSEQUENCE seq_2 RESTART WITH 5 INCREMENT by 2 MAXVALUE300;该实例修改seq_2为产生从5开始,最大值300,每次递增2的序列重命名序列:rename sequence seq_2 to seq_3该语句修改seq_2的名字为seq_3,但功能不变。删除序列:DROP SEQUENCE seq_2;该语句删除序列seq_2。
使用序列CREATE TABLE tab1 (col1 int, col2int); INSERT INTO tab1 (col1, col2) VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL) --用序列seq_2的下一个值和当前值插入表tab1
SELECT * FROM tab1; col1 col2 1 1ALTER SEQUENCE seq_2 RESTART WITH 5 INCREMENT by 2 MAXVALUE 300;--修改序列 INSERT INTO tab1 (col1, col2) VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL)--再次插入数据SELECT * FROM tab1; col1 col2 1 1 5 5当序列产生的值超过最大值时,则会出现如下错误:8313: Sequence (informix.seq_2) exceeds itsMAXVALUE.要注意的是:
①第一次nextval返回的是初始值;随后的nextval会自动增加你定义的incrementby值,然后返回增加后的值。
currval总是返回当前sequence的值,但是在第一次nextval初始化之后才能使用currval,否则会出错。
一次nextval会增加一次sequence的值。但是如果你在同一个条SQL语句里面针对同一个sequence使用多次nextval,其值都是一样的。
②如果指定cache值,就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,自动再取一组到cache。使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失.所以可以在create sequence的时候用nocache防止这种情况
总之,使用序列(sequence)可以快速的插入有序的不重复数据,这对于某些需要产生大量不重复整数的环境中十分有用,但序列只能产生有序的整数数据,也因此限制了该用法的使用场景。但不管怎样,有了序列总能使我们的一些操作变得轻松便利
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请
点击举报。