当前位置:数据库 > DB2 >>

DB2序列简介及使用

DB2序列简介及使用
 
一、创建序列
序列是按照一定的规则生产的数值,序列的作用非常的大,比如银行交易中的流水号,就是记录每笔交易的关键字段。
通过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 命令成功完成。
 
 
查看编目表中存放的序列seq_001的信息:
SELECT SEQNAME,START,INCREMENT,MINVALUE,MAXVALUE,CYCLE,CACHE,ORDER 
FROM SYSCAT.SEQUENCES WHERE SEQNAME='SEQ_001'
SEQNAME     START      INCREMENT     MINVALUE     MAXVALUE     CYCLE   CACHE     ORDER
--------- ----------   -----------   ----------   ------------ ------   ------- --------
SEQ_001      1.        1.              1.          2147483647.  N         21         N
 
 
  1 条记录已选择。
 
 
注意事项:
1、常量序列,也就是一个不会改变其生成值的序列。
   创建的时候,指定增长值为0,即increment by 0,不过start with值不能超过其数据类型的最大最小值;
   另一种方法,指定start with值,minvalue值,和maxvalue值相等。
2、当序列定义为no cycle,可以通过alter sequence改变其属性,让其达到边界值之后还能继续产生序列值,
   即从no cycle修改为cycle
3、当定义序列时指定cycle,除了increment by 1或者-1之外,序列生成的最大值将不是指定数据类型的最大值;
   如,一个序列定义为start with=1,increment=2,maxvalue=10,则能够生成的最大值将会是9,而不是10.
4、序列的定义者拥有序列的alter和usage特权(with grant option,可将其授予其他用户),
   序列的拥有者可以删除序列。
5、下面2点使用与所有DB2数据库版本,非标准信息:
   1).A comma can be used to separate multiple sequence options
   2).novinvalue,nomaxvalue,nocycle,nocache,noorder可以替代
       no minvalue,no maxvalue,no cycle,no cache,no order。
 
二、修改序列
语法如下:
>>-ALTER SEQUENCE--sequence-name-------------------------------->
 
 
   .-----------------------------------------------.   
   V  (1)                                          |   
>----------+-RESTART--+------------------------+-+-+-----------><
           |          '-WITH--numeric-constant-' |     
           +-INCREMENT BY--numeric-constant------+     
           +-+-MINVALUE--numeric-constant-+------+     
           | '-NO MINVALUE----------------'      |     
           +-+-MAXVALUE--numeric-constant-+------+     
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,