DB2_自动生成值

DB2_自动生成值

生成数字序列的两种方法

在 DB2 中可以用两种方法自动生成一个数字序列:

 

IDENTITY 列

当用 IDENTITY 属性定义表的列时,每当将一行插入表时,就会自动为该列生成一个数值。

 

SEQUENCE 对象

让 DB2 自动生成数字序列的第二种方法是创建 SEQUENCE 对象。可以使用 序列表达式(sequence expression)来引用序列对象。序列表达式可以出现在表达式能够出现的大多数位置。序列表达式可以指定要返回的值是新生成的值还是以前生成的值。

在标识和序列之间做出选择

虽然标识和序列都用于生成数值,但您也许要根据特殊情况选择使用一种来代替另一种。

在以下情况下,标识列很有用:

  • 表中只有一列需要自动生成的值
  • 每一行都需要独立的值
  • 用自动生成器来产生表的主键
  • 生成新值的进程与对表的插入操作紧密联系,无论插入操作是如何发生的

在以下情况下,序列对象很有用:

  • 要将从一个序列生成的值存储到多个表中
  • 每个表有多个列需要自动生成的值(可能通过使用同一个序列或多个序列为每一行生成多个值)
  • 生成新值的进程与任何对表的引用无关

与序列对象不同,标识列是在表上定义的,因此需要某些限制。每个表最多只能有一个标识列。当创建一个列作为标识列时,对于该列必须使用确切的数字数据类型。因为标识属性为列生成一个值,这类似于 DEFAULT 子句所做的,所以在定义标识列时不能指定 DEFAULT 子句。标识列被隐式地定义成 NOT NULL 。

 1. 使用 IDENTITY 列创建订单表

 

CREATE TABLE customer_orders_t (
   order_id   
        INT NOT NULLGENERATED ALWAYS 
      AS IDENTITY 
      (START WITH 1 
       
        INCREMENT BY 1 
       
        MINVALUE 1 
       
        NO MAXVALUE 
       NO CYCLE
       NO CACHE
       ORDER),
   order_date 
        DATE NOT NULL,
   cust_id    
        INT NOT NULL,
   product_id 
        INT NOT NULL,
   quantity   
        INT NOT NULL,
   price      
        DECIMAL(10,2) 
        NOT NULL,
   status     
        CHAR(9) 
        NOT NULL,PRIMARY KEY (order_date, order_id));

INSERT INTO customer_orders_t 
        VALUES 
   (
        DEFAULT, CURRENT DATE,
    :cid, :pid, :qty, :cost, 'PENDING')

 

 2. SEQUENCE 对象

CREATE SEQUENCE orders_seq 
        AS INT
   
        START WITH 1 
   
        INCREMENT BY 1 
   
        MINVALUE 1 
   
        NO MAXVALUE 
   NO CYCLE
   NO CACHE
   ORDER;

=================
NEXT VALUE FOR orders_seq
=================
PREVIOUS VALUE FOR orders_seq

 http://www.ibm.com/developerworks/cn/data/library/techarticles/0302fielding/0302fielding.html

转载于:https://www.cnblogs.com/caroline4lc/p/4190156.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/109611.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 数据结构与算法Python_数据结构与算法python语言实现

    数据结构与算法Python_数据结构与算法python语言实现我们已经知道算法是具有有限步骤的过程,其最终的目的是为了解决问题,而根据我们的经验,同一个问题的解决方法通常并非唯一。这就产生一个有趣的问题:如何对比用于解决同一问题的不同算法?为了以合理的方式提高程序效率,我们应该知道如何准确评估一个算法的性能。本节学习首先介绍算法分析的重要性,并讲解了分析算法的时间复杂度和空间复杂度分析方法,最后介绍了Python列表和字典常见操作的时间复杂度。

    2022年9月27日
  • charles打断点有什么用_charles打断点后 如何执行

    charles打断点有什么用_charles打断点后 如何执行前言Charles是收费软件,可以免费试用30天。试用期过后,未付费的用户仍然可以继续使用,但是每次使用时间不能超过30分钟,并且启动时将会有10秒种的延时。此时,我们只需网上找一个注册码即可解

    2022年8月6日
  • HibernateTemplate使用方法

    HibernateTemplate使用方法HibernateTemplate提供非常多的常用方法来完成基本的操作,比如通常的增加、删除、修改、查询等操作,Spring2.0更增加对命名SQL查询的支持,也增加对分页的支持。大部分情况下,使用Hibernate的常规用法,就可完成大多数DAO对象的CRUD操作。1、常用方法:   1)voiddelete(Objectentity):删除指定持久化实例   2)dele

    2022年6月16日
  • C语言条件运算符_c语言数组长度可变吗

    C语言条件运算符_c语言数组长度可变吗如果希望获得两个数中最大的一个,可以使用if语句,例如:if(a>b){max=a;}else{max=b;}不过,C语言提供了一种更加简单的方法,叫做条件运算符,语法格式为:表达式1?表达式2:表达式3条件运算符是C语言中唯一的一个三目运算符,其求值规则为:如果表达式1的值为真,则以表达式2的值作为整个条件表达式的值,否则以表达式3…

    2022年10月4日
  • Windows 下Maven安装配置(本地仓库配置)[通俗易懂]

    Windows 下Maven安装配置(本地仓库配置)[通俗易懂]一、下载mavenmaven官网:http://maven.apache.org/下载下来也就是一个压缩文件,解压。我下载的是3.5.2版本,解压之后如下:路径为:D:\ProgramFiles\apache-maven-3.5.2二、配置环境变量添加自定义变量:MAVEN_HOME值为刚才的解压路径:D:\ProgramFiles\apache-maven-3.5.2。MAVEN_

    2022年5月8日
  • Unity3d场景快速烘焙【2020】

    Unity3d场景快速烘焙【2020】很多刚刚接触Unity3d的童鞋花了大量的时间自学,可总是把握不好Unity3d的烘焙,刚从一个坑里爬出来,又陷入另一个新的坑,每次烘焙一个场景少则几个小时,多则几十个小时,机器总是处于假死机状态,半天看不到结果,好不容易烘焙完了,黑斑、撕裂、硬边、漏光或漏阴影等缺陷遍布,惨不忍睹,整体效果暗无层次,或者苍白无力,灯光该亮的亮不起来,该暗的暗不下去,更谈不上有什么意境,痛苦的折磨,近乎失去了信心,一个团队从建模到程序,都没什么问题,可一到烘焙这一关,就堵得心塞,怎么也搞不出好的视觉效果,作品没法及时向用户交

    2022年6月11日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号