打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
informix中的序列sequence
    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
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 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)可以快速的插入有序的不重复数据,这对于某些需要产生大量不重复整数的环境中十分有用,但序列只能产生有序的整数数据,也因此限制了该用法的使用场景。但不管怎样,有了序列总能使我们的一些操作变得轻松便利
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
从不sequential的sequence
Oracle中序列(SEQUENCE)的使用一例
SEQUENCE
DB2和Oracle创建序列和查询的区别
使用navicat创建postgres如何设置主键自增序列
不通过删除重建方式重置序列值得简单方式。
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服