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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Mysql主从备份和SQL语句的备份

    MySQL服务器的主从配置,本来是一件很简单的事情,无奈不是从零开始,总是在别人已经安装好的mysql服务器之上,这就会牵扯到,mysql的版本,启动文件,等一些问题。http://www.cnb

    2021年12月23日
  • MySQL 如何实现递归查询?「建议收藏」

    MySQL 如何实现递归查询?「建议收藏」点击上方IT牧场,选择置顶或者星标技术干货每日送达!前言最近在做的业务场景涉及到了数据库的递归查询。我们公司用的Oracle,众所周知,Oracle自带有递归查询的功能,所以…

  • 技术相关连接

    技术相关连接JavaScript:JavaScript ES6中export及export default的区别 :https://blog.csdn.net/zhou_xiao_cheng/article/details/52759632Vue:从vue新建页面过程看vue项目文件调用关系 :https://blog.csdn.net/weixin_43236610/article…

  • python最长回文子串动态规划_最长回文子串问题

    python最长回文子串动态规划_最长回文子串问题问题描述回文串是指aba、abba、cccbccc、aaaa这种左右对称的字符串。输入一个字符串Str,输出Str里最长回文子串的长度。方法一:暴力求解遍历每一个子串,再判断这个子串是不是回文串,最后判断这个串是不是最长的回文子串。遍历子串的复杂度是O(n^2),判断是不是回文串的复杂度是O(n),所以这个算法的复杂度是O(n^3)。方法二:动态规划法用一个二维的数组ai来表示从第i位到第j位的子…

  • Pytest(17)运行未提交的git(pytest-picked)

    Pytest(17)运行未提交的git(pytest-picked)前言我们每天写完自动化用例后都会提交到git仓库,随着用例的增多,为了保证仓库代码的干净,当有用例新增的时候,我们希望只运行新增的未提交git仓库的用例。pytest-picked插件可以

  • 选择文件选择文件夹

    选择文件选择文件夹namespaceMicrosoft.Win32选择文件:if(string.IsNullOrEmpty(folderInitialDirectory)){folderInitialDir

发表回复

您的电子邮箱地址不会被公开。

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