`
kevin.wang
  • 浏览: 250955 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle 之 Sequence

阅读更多
1、Create Sequence
  你首先要有CREATE SEQUENCE或CREATE ANY SEQUENCE权限,
  
  CREATE SEQUENCE emp_sequence
  
  INCREMENT BY 1  -- 每次加几个
  START WITH 1   -- 从1开始计数
  NOMAXVALUE    -- 不设置最大值
  NOCYCLE     -- 一直累加,不循环
  CACHE 10;
  
  一旦定义了emp_sequence,你就能用CURRVAL,NEXTVAL
  CURRVAL=返回 sequence的当前值
  NEXTVAL=增加sequence的值,然后返回 sequence 值
  比如:
  emp_sequence.CURRVAL
  emp_sequence.NEXTVAL
  
  能使用sequence的地方:
  - 不包含子查询、snapshot、VIEW的 SELECT 语句
  - INSERT语句的子查询中
  - INSERT语句的VALUES中
  - UPDATE 的 SET中
  
  能看如下例子:
  INSERT INTO emp VALUES
  (empseq.nextval, ’LEWIS’, ’CLERK’,7902, SYSDATE, 1200, NULL, 20);
  
  SELECT empseq.currval FROM DUAL;
  
  不过要注意的是:
  
  - 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,不过在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不相同的。明白?
  
  - 如果指定CACHE值,ORACLE就能预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库忽然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以能在create sequence的时候用nocache防止这种情况。
  
2、Alter Sequence
  
  你或是该sequence的owner,或有ALTER ANY SEQUENCE 权限才能改动sequence. 能alter除start至以外的所有sequence参数.如果想要改动start值,必须 drop sequence 再 re-create .
  
  Alter sequence 的例子
  
  ALTER SEQUENCE emp_sequence
  INCREMENT BY 10
  MAXVALUE 10000
  CYCLE   -- 到10000后从头开始
  NOCACHE ;
bitsCN.Com


  
  影响Sequence的初始化参数:
  
  SEQUENCE_CACHE_ENTRIES =设置能同时被cache的sequence数目。
  
  能非常简单的Drop Sequence
  
  DROP SEQUENCE order_seq;

引发的思考:
   1. sequence的引入是为了解决并发中数据不一致问题
    2. 为什么在数据库中建立这种机制,而不使用业务逻辑中给定的数据
        因为: 在实际的应用中,数据库是不允许down的,全年7*24不间断运行;
       所以在数据库中定义sequence,可以保证稳定的数据源,不会导致数据冲突.
   3. 从测试投入生产中注意起始数据.
分享到:
评论

相关推荐

    oracle中sequence介绍及应用

    ### Oracle中的Sequence介绍及应用 #### 一、Sequence概述 在Oracle数据库中,Sequence是一种用于自动产生数值序列的对象。它可以生成连续的整数或者非连续的整数序列,并且可以根据需求进行递增或递减。Sequence...

    Oracle sequence 重置(失效恢复)

    ### Oracle Sequence 重置(失效恢复) 在进行Oracle数据库移植或维护时,可能会遇到Sequence失效的问题。这种情况通常发生在数据迁移后,原有的Sequence不再与表中的最大值相匹配,导致新记录插入时出现ID冲突或者...

    Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍

    Oracle 创建自增字段方法-ORACLE SEQUENCE 的简单介绍 Oracle SEQUENCE 是一种特殊的数据库对象,用于生成一系列唯一的数值,通常用于主键或其他需要唯一标识的字段。下面将详细介绍 Oracle 创建自增字段方法-...

    使用JDeveloper开发WEB应用时同时使用Oracle的sequence和trigger

    本篇将重点介绍如何在使用JDeveloper这款强大的集成开发环境(IDE)时,结合Oracle的sequence和trigger来实现高效的数据操作。 首先,让我们理解一下sequence和trigger的概念。在Oracle中,sequence是一种自动递增...

    oracle中的sequence实现主键增长

    Oracle中的Sequence是数据库管理系统提供的一种机制,用于生成序列化的整数,通常用于主键或唯一标识符,确保数据的唯一性和有序性。在Oracle中,Sequence不同于其他数据库系统的自增字段,例如SQL Server中的`...

    oracle_sequence.rar_oracle

    Oracle数据库是世界上最广泛使用的数据库系统之一,其强大的功能和稳定性深受企业青睐。在Oracle中,序列(Sequence)是一个非常重要的概念,它主要用于生成唯一的整数序列,常常被用来作为主键值,特别是在插入新...

    ORACLE SEQUENCE的简单介绍

    ### ORACLE SEQUENCE 的详细介绍与应用 #### 一、概述 在数据库开发和管理中,自动编号是一项常用的功能。在 SQL Server 中,我们可以通过自增字段来实现这一功能。而在 Oracle 数据库中,则使用了一个名为 **...

    oracle 主键自增 sequence

    ### Oracle 主键自增 Sequence 的实现与应用 #### 一、Sequence 的概念及用途 在 Oracle 数据库中,`Sequence` 是一种用于生成一系列唯一数值的对象。这些数值可以按照特定的规则递增或递减,并且可以设定是否循环...

    分享ORACLE SEQUENCE跳号总结

    在ORACLE数据库中,序列(SEQUENCE)是使用非常频繁的一个数据库对象,但是有时候会遇到序列(SEQUECNE)跳号(skip sequence numbers)的情形,那么在哪些情形下会遇到跳号呢?  事务回滚引起的跳号  不管序列有...

    让CoolSQL支持Oracle Sequence的GeneratedKey,懂的入

    本篇文章将围绕"让CoolSQL支持Oracle Sequence的GeneratedKey"这一主题展开,探讨如何在开发过程中利用Oracle的Sequence特性并将其与CoolSQL工具相结合,以实现更高效的数据操作。 首先,Oracle Sequence是一种用于...

    浅谈MyBatis-Plus学习之Oracle的主键Sequence设置的方法

    在Oracle数据库中,由于不支持自动递增的主键策略,开发者通常会使用Sequence来生成主键值。本文将深入探讨如何在MyBatis-Plus(MP)框架中配置Oracle的主键Sequence。 首先,Oracle Sequence是Oracle数据库提供的...

    sqlserver实现oracle的sequence方法

    在Oracle数据库中,Sequence是一种非常方便的对象,用于生成序列化的唯一数字,通常用于主键或者唯一标识符。然而,SQL Server并不直接支持Sequence对象。在SQL Server中,开发者经常使用Identity列来达到类似的效果...

    oracle GoldenGate 同步oracle sequence的步骤

    ### Oracle GoldenGate 同步 Oracle Sequence 的步骤 Oracle GoldenGate 是一款强大的数据复制软件,能够实现跨平台的数据复制。在企业级应用环境中,为了确保数据的一致性和完整性,经常需要将源数据库中的序列...

    详解ORACLE SEQUENCE用法

    在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。 1、Create Sequence 首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。 创建语句如下: CREATE SEQUENCE seqTest INCREMENT...

    oracle 存储过程使用 sequence

    在Oracle中,Sequence则是一种自增序列号生成器,通常用于主键或者唯一标识的生成。在本话题中,我们将深入探讨如何在存储过程中使用Sequence。 首先,理解Sequence的基本概念。Sequence在Oracle中是一个预定义的...

    Oracle、DB2、PostgreSQL之Sequence总结

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

    sequence-generator:比oracle sequence更加强大的序列生成器,支持分布式环境,配合MHA可完美做到高可用,与spring无缝集成,使用非常简单可靠

    sequence-generator简介类似于oracle的sequence,但更加强大支持分布式环境下sequence的生成使用乐观锁和AtomicLong确保sequence的唯一性使用及其简单db scriptCREATE TABLE sequence_database.sequence ( name ...

    Hibernate Oracle sequence的使用技巧

     1、在Oracle sequence首先创建sequence  create sequence seq_idminvalue 1start with 1increment by 1cache 20;  2、在你的hbm.xml中的配置  seq_id  这样再插入数据的时候,Hibernate会自动生成如下语句: ...

Global site tag (gtag.js) - Google Analytics