zoukankan      html  css  js  c++  java
  • oracle之sequence详解

    Oracle提供了sequence对象,由系统提供自增长的序列号,每次取的时候它会自动增加,通常用于生成数据库数据记录的自增长主键或序号的地方。

    sequence的创建需要用户具有create sequence或者create any sequence的权限。


    1、创建sequence

    create sequence seq_name
    INCREMENT BY 1 -- 每次加几个 
    START WITH 1 -- 从1开始计数 
    NOMAXvalue -- 不设置最大值(最小值:minvalue,最大值:maxvalue) 
    NOCYCLE -- 一直累加,不循环 
    CACHE 10; -- 设置缓存cache个序列,
    如果设置了CACHE值,ORACLE将在内存里预先放置一些sequence,以使存取速度更快。cache里面的取完后,oracle自动再取一组到cache。 但是,使用cache可能会跳号, 当遇到数据库突然异常down掉(shutdown abort),cache中的sequence就会丢失. 因此,推荐在create sequence的时候使用 nocache 选项。

    2、删除sequence

    drop sequence seq_name;

    3、修改sequence

    可以修改除start值以外的属性值,如:

    alter sequence seq_name maxvalue 9999;

    如果需要修改sequence的start和minvalue值,需要重建sequence。


    使用sequence

      CurrVal:返回 sequence的当前值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。 

      NextVal:增加sequence的值,然后返回增加后sequence值,
    第一次NEXTVAL返回的是初始值,随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。

    可以在Sql语句中可以使用sequence的地方:

    -> 不包含子查询、snapshot以及VIEW的 SELECT 语句 
    -> INSERT语句的子查询中 
    -> INSERT语句的values中 
    -> UPDATE 的 SET中
    
    
    sequence的中断

    当回滚的语句中包含sequence时,该sequence就会产生中断;

    当sequence启用cache时,sequence的值会载入内存,当系统异常关机重启时,内存中的sequence值会丢失进而导致中断。

  • 相关阅读:
    洛谷 P1650 田忌赛马(dp)
    卡常技巧(持续更新)
    CF106C Buns(多重背包 单调队列优化)
    洛谷 P1385 密令(dp,离线)
    CF245H Queries for Number of Palindromes(dp,二维前缀和)
    CF1061C Multiplicity(dp)
    对拍技巧
    牛客练习赛89 解题报告(ABCDF)
    洛谷 P1018 [NOIP2000 提高组] 乘积最大(dp,高精度)
    洛谷 P5629 【AFOI-19】区间与除法(ST表)
  • 原文地址:https://www.cnblogs.com/upcyaya/p/4845662.html
Copyright © 2011-2022 走看看