设为首页 收藏本站
查看: 880|回复: 0

[经验分享] DB2 SEQUENCE 序列相关说明

[复制链接]

尚未签到

发表于 2016-11-14 09:30:40 | 显示全部楼层 |阅读模式
1、序列是按照一定的规则生产的数值,序列的作用非常的大,比如银行交易中的流水号,就是记录每笔交易的关键字段。
 (1)创建SEQUENCE的时候,最好不要加双引号,比如:
db2 ==> CREATE SEQUENCE "seq_test" ...
应该改为:
db2 ==> CREATE SEQUENCE seq_test ...
加了双引号,表示大小写敏感,如果你使用以下语句去查找序列的话,则会报错:
db2 ==> select (nextval for seq_test) from sysibm.sysdummy1;

SQL0204N  "XXX.SEQ_TEST" is an undefined name.  SQLSTATE=42704
2. 创建SEQUENCE
  通过create sequence语句创建序列,具体语法如下:
CREATE    SEQUENCE  sequence-name--·----------->
           '-OR REPLACE-'                               
   .-AS INTEGER--------.                                        
>--+-------------------+--·--+------------------------------+--->
   '-AS--| data-type |-'     '-START WITH--numeric-constant-'   

      .-INCREMENT BY 1-----------------.      
>--·--+--------------------------------+--·--------------------->
      '-INCREMENT BY--numeric-constant-'      

   .-NO MINVALUE----------------.      
>--+----------------------------+--·---------------------------->
   '-MINVALUE--numeric-constant-'      

   .-NO MAXVALUE----------------.     .-NO CYCLE-.      
>--+----------------------------+--·--+----------+--·----------->
   '-MAXVALUE--numeric-constant-'     '-CYCLE----'      

   .-CACHE 20----------------.     .-NO ORDER-.      
>--+-------------------------+--·--+----------+--·-------------><
   +-CACHE--integer-constant-+     '-ORDER----'      
   '-NO CACHE----------------' 
简化写如下:
create sequence seq_name
start with a
increment by b
minvalue c
maxvalue d
no cycle
cache e
order
参数简介如下:
or replace:若有创建序列重名的序列,那么将会被替代(先删除,再创建)
as datatype:指定数据类型,这里说明下,序列的数据类型只能为数值型,
            如,smallint,integer,bigint,不带小数点的decimal类型。
start with:指定序列的起始值,默认情况下,对于升序的序列是当前指定数据类型的最小值,
            对于降序序列的是当前指定类型的最大值。
increment by:指定增长的值,默认值为1,正数表示此序列为增长升序的,负数表示此序列为降序的。
minvalue:最小值,若降序序列,no cycle的话,到此值的时候就不再生成序列值了;
no minvalue:对于升序序列来说,此值为start with的值,如果start with值未指定的话就是1.
             对于降序序列来说,此值就是指定数据类型的最小值。
maxvalue:指定生产序列的最大值,
no maxvalue:对于升序序列来说,此值为指定数据类型的最大值;
             对于降序序列来说,此值为start with值,若未指定start with值的话就是-1.
cycle:循环使用数据值,对于升序序列来说,当达到了最大值之后,下一个值将会是其最小值;
       对于降序序列来说,达到最小之后,下一个序列值为其最大值。
no cycle:当达到序列的边界值之后,就不再产生序列值,默认选项。
cache:缓存序列值,表示每次应用此序列的时候,预先生产并存放在内存中的序列值。
       其作用是有效的降低了写日志的I/O操作。
       若在使用的过程中,出现系统错误的话,那么所有这些缓存值将会丢失。
       最小值为2,默认为20
no cache:当指定此选项的时候,内存中不会存储任何序列值,无论出现什么异常现象都不会影响到此序列,
          每次生存新的序列值,都会导致写日志的I/O操作。
order:按照请求的顺序生成值。
no order:不会按照请求的顺序生成值,默认情况
  
下面创建一个序列seq_001:
create sequence seq_001 
start with 1 
increment by 1 
no maxvalue 
no cycle 
cache 21
DB20000I  SQL 命令成功完成。
3、序列设置开始值
 DB2:ALTER SEQUENCE 序列名  RESTART WITH 下一值

4、修改 
 修改最大值:   ALTER SEQUENCE <sequence_name> MAX VALUE <numeric-constant> | NO MAXVALUE 
 修改最小值:   ALTER SEQUENCE <sequence_name> MIN VALUE <numeric-constant> | NO MINVALUE (此值需要比当前值小) 
 修改步长:    ALTER SEQUENCE <sequence_name> INCREMENT BY <numeric-constant>;
 修改CACHE值: ALTER SEQUENCE <sequence_name> CACHE <numeric-constant> | NO CACHE 
 修改循环属性: ALTER SEQUENCE <sequence_name> <CYCLE | NO CYCLE>
 修改排序属性:ALTER SEQUENCE <sequence_name> <ORDER | NO ORDER>
 从新计数:    ALTER SEQUENCE <sequence_name> RESTART | RESTART WITH <numeric-constant>
可以修改的属性如下:
(1)序列其实值(或重置)
(2)increment值
(3)最大最小值
(4)cache值
(5)当达到边界值的时候,是否循环产生序列值
(6)是否按照请求顺序产生序列值
注意:
(1)序列的数据类型不能修改,若要修改,只能删除当前序列,重建时指定想要的数据类型。
(2)当修改的时候,所有的缓存值将会丢失。
(3)当将序列修改为cycle之后,序列将会产生重复的值。
5、删除SEQUENCE
    DROP SEQUENCE <sequence_name>;
6、查询SEQUENCE
  select SEQNAME,"INCREMENT", "START","MAXVALUE","MINVALUE","CYCLE","CACHE","ORDER"  from sysibm.syssequences where seqname='XXX' --大小写敏感的,请和定义相同
  可以查询sequence 的信息, 比如:名称 步长 开始值 最大值 最小值 是否循环 缓存值大小 是否排序 等信息
  (1) 查询SEQUENCE 下一个值
  nextval for SEQUENCE名称
  如果想直接查看 ,可以使用 values() ,比如 values( nextval for SEQUENCE名称)
    (2) 查询SEQUENCE当前值
       prevval for SEQUENCE名称
  注意:  nextval  和 prevval 可以使用在select,values,insert,和update语句中,不能使用在where语句中

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-300066-1-1.html 上篇帖子: DB2中的时间函数 下篇帖子: DB2之partition by
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表