分享

informix中的序列sequence

 昵称15242507 2015-03-11
    informix自10开始可以产生序列(sequence)。序列(sequence)有时候也被叫做序列产生器(sequence generator)或序列对象(sequence object)。它产生一个单调增或单调减的整数序列。
创建序列:
    CREATE SEQUENCE seq_2
    INCREMENT BY 1 
    START WITH 1
    MAXVALUE 30 
    MINVALUE 0
    NOCYCLE 
    CACHE 10 
    ORDER;
   上面示例中创建了一个名为seq_2的序列,该序列产生从1到30的单调递增1的整数,如果大小超过30则报8313(超过最大值)错误。这里的NOCYCLE选项表示如果产生的整数大于最大值后则停止生成整数,若设为CYCLE则将从开始值重新开始生成数据。
改变序列:
ALTER SEQUENCE seq_2 RESTART WITH 5 INCREMENT by 2 MAXVALUE 300;该实例修改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, col2 int); 
INSERT INTO tab1 (col1, col2) VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL)       --用序列seq_2的下一个值和当前值插入表tab1 
SELECT * FROM tab1; 
             col1 col2 
                 1
ALTER 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
                 5
当序列产生的值超过最大值时,则会出现如下错误:8313: Sequence (informix.seq_2) exceeds its MAXVALUE.

要注意的是:

①第一次nextval返回的是初始值;随后的nextval会自动增加你定义的increment by值,然后返回增加后的值。
    currval总是返回当前sequence的值,但是在第一次nextval初始化之后才能使用currval,否则会出错。
    一次nextval会增加一次sequence的值。但是如果你在同一个条SQL语句里面针对同一个sequence使用多次nextval,其值都是一样的。
②如果指定cache值,就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况

总之,使用序列(sequence)可以快速的插入有序的不重复数据,这对于某些需要产生大量不重复整数的环境中十分有用,但序列只能产生有序的整数数据,也因此限制了该用法的使用场景。但不管怎样,有了序列总能使我们的一些操作变得轻松便利

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多