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_namestart with aincrement by bminvalue cmaxvalue dno cyclecache eorder参数简介如下: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,默认为20no cache:当指定此选项的时候,内存中不会存储任何序列值,无论出现什么异常现象都不会影响到此序列,每次生存新的序列值,都会导致写日志的I/O操作。order:按照请求的顺序生成值。no order:不会按照请求的顺序生成值,默认情况。下面创建一个序列seq_001:create sequence seq_001start with 1increment by 1no maxvalueno cyclecache 21DB20000I SQL 命令成功完成。查看编目表中存放的序列seq_001的信息:SELECT SEQNAME,START,INCREMENT,MINVALUE,MAXVALUE,CYCLE,CACHE,ORDERFROM SYSCAT.SEQUENCES WHERE SEQNAME='SEQ_001'SEQNAME START INCREMENT MINVALUE MAXVALUE CYCLE CACHE ORDER--------- ---------- ----------- ---------- ------------ ------ ------- --------SEQ_001 1. 1. 1. 2147483647. N 21 N1 条记录已选择。注意事项:1、常量序列,也就是一个不会改变其生成值的序列。创建的时候,指定增长值为0,即increment by 0,不过start with值不能超过其数据类型的最大最小值;另一种方法,指定start with值,minvalue值,和maxvalue值相等。2、当序列定义为no cycle,可以通过alter sequence改变其属性,让其达到边界值之后还能继续产生序列值,即从no cycle修改为cycle3、当定义序列时指定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 options2).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-+------+上一个:DB2数值函数简介及使用
下一个:Cent6.3 X86_64下安装db2
- 更多DB2疑问解答:
- sql语句 从DB2移动到其他数据库
- DB2 character类型更新报错
- db2 怎么查看执行的sql语句需要多少系统临时表空间?
- db2数据库的table表里,一money字段中的数据显示为:56000,00 本人想要用sql语句将它修改为56,000,000
- DB2导出表结构,能不能只导出指定的表结构。求大神指教,给出命令哈
- DB2数据库,增加数据表空间容量需要重启数据库吗?
- cognos连接db2,为什么启动不了服务啊, 连接Oracle可以启动服务。。
- PostgreSQL对比DB2
- db2如何查看编写好的存储过程?
- db2数值截取
- 谁知道关于DB2怎么看系统日志,归档日志的位置。并且怎么修改日志呢?
- db2怎样重组表结构?
- 求一本【牛新庄的DB2运维教程】?
- db2 的 SECADM权限 是干什么的
- DB2怎么删除表空间所以数据