首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

DB2 SEQUENCE 序列有关说明

2013-08-04 
DB2 SEQUENCE 序列相关说明1、序列是按照一定的规则生产的数值,序列的作用非常的大,比如银行交易中的流水号

DB2 SEQUENCE 序列相关说明

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语句中

?

热点排行