`

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

 

分享到:
评论

相关推荐

    Oracle、DB2、PostgreSQL之Sequence总结

    在Oracle、DB2和PostgreSQL这三种数据库管理系统中,Sequence都是内置的特性,允许用户创建并管理这样的自动递增序列。然而,值得注意的是,并非所有数据库系统都支持Sequence,比如MySQL、SQL Server和Sybase就没有...

    DB2到GreenPlum/PostgreSQL的转换指南

    DB2中支持自动生成ID列的功能,即序列号(SEQUENCE),而在GreenPlum/PostgreSQL中,可以通过序列(SEQUENCE)或IDENTITY属性来实现类似功能。在转换时,需要确保自增ID列的定义正确无误。 ###### 2.2.5 特殊对象 -...

    db2迁移到mysql.docx

    #### 五、db2sequence处理 DB2中的序列(sequence)在MySQL中没有直接等价物。通常,可以使用MySQL的自增(auto-increment)特性来模拟序列。但对于复杂的序列逻辑,如获取当前值或下一个值,需要编写自定义函数来实现。...

    Oracle与DB2的对应关系

    在 DB2 中没有对应的数据库对象,只能通过在某一列上实现 Oracle 中相应的 Sequence 功能。 八、SQL 语句 在 Oracle 中,左联接是通过在等号左边用“(+)”符号来实现,而在 DB2 中左联接是通过“LEFT OUTER JOIN”...

    oracle的序列

    - **兼容性**:序列对象在Oracle和DB2等数据库中可用,但在MySQL和SQL Server等其他数据库系统中则没有提供直接的序列创建功能。 #### 二、序列的创建 创建序列的基本语法如下: ```sql CREATE SEQUENCE 序列名 ...

    sql server 2000 分页存储过程,DB2分页存储过程,db2自动生成流水号存储过程

    无论是SQL Server 2000的`ROW_NUMBER()`函数,还是DB2的`OFFSET`和`FETCH NEXT`,以及`IDENTITY`和`SEQUENCE`,都是为了在大数据量场景下高效、准确地检索和管理数据。理解并熟练掌握这些技术,对于数据库管理员和...

    db2使用技巧

    DB2 使用技巧的总结,涵盖了字符串连接、数据删除、数据导入导出、表检查、锁表问题、存储过程、索引检查、数据库快照、存储过程查看、表列表、字符位置搜索、日期计算、表映射、表结构查看、数据库重启、数据库激活...

    DB2 Express-C 快速入门书籍

    - **标识列(Identity Columns)**和**序列对象(Sequence Objects)**:用于生成唯一值,保证数据的唯一性和完整性。 通过上述知识点,我们可以看出DB2 Express-C快速入门书籍为初学者提供了一个全面的入门指南。...

    Hibernate Junit测试增删改查(DB2版本的)

    序列(Sequence)是一种特殊的数据库对象,用于生成唯一的整数序列,常用于主键生成。在Hibernate中,我们可以使用hibernate_sequence或者其他自定义的序列来为实体类的主键生成策略提供支持。 在进行Junit测试时,...

    DB2 000-610.pdf

    序列(Sequence)在DB2中用于生成数值,这些数值不是关联到任何特定的列或表。序列特别适合在需要自动增加序号的场景中使用,例如,在插入新行时,需要自动为每一行分配一个唯一编号(选项D)。其他选项涉及触发器的...

    db2常用语句

    - **创建序列**:`CREATE SEQUENCE sequence_name START WITH start_value INCREMENT BY increment_value NO MAXVALUE NO CYCLE CACHE cache_size` - 序列在自动生成唯一编号或自动增长字段时非常有用,提高了数据...

    IBM DB2 日常维护汇总(六)

    本篇主要汇总了十个关键知识点,涵盖了概要表的创建、刷新、修改,临时表的创建,视图和别名的管理,序列的创建与操作,以及数据导入导出、加载和数据库监控的相关内容。 1. **创建概要表**:概要表类似于Oracle的...

    db2-703.doc

    ##### 1.1.3 序列对象 (Sequence) 序列对象允许生成连续的整数值,可以用于自动填充主键等字段。它与标识列不同,序列是全局的、独立于特定表的对象。 - **创建序列**: ```sql CREATE SEQUENCE myseq AS ...

    一种通用的生成序列的方法

    传统上,各大数据库供应商如Oracle、MySQL、SQL Server、DB2等都提供了自增数字序列的支持,但其实现方式各异。例如,Oracle使用的是`SEQUENCE`对象,而SQL Server则利用`IDENTITY`属性。然而,这些方法往往依赖于...

    DB2 730认证原题

    序列(Sequence)的特性 **知识点**:序列是一种自动生成数值的对象,主要用于为表中的行自动生成唯一的标识符。 **特性**: - **最大值和最小值**:序列的最大值(MAXVALUE)可以等于最小值(MINVALUE)。这意味...

    DB2数据库对象基础知识.docx

    本文将详细介绍DB2数据库中的一些基本对象及其使用方法,包括但不限于表、用户定义数据类型、约束、视图和索引等,并特别关注别名和序列对象的使用。 #### 二、基本数据库对象 **1. 表(Table)** - 表是最常见的...

Global site tag (gtag.js) - Google Analytics