zoukankan      html  css  js  c++  java
  • 【Oracle】详解Oracle中的序列

    序列: 是oacle提供的用于产生一系列唯一数字的数据库对象。

    •   自动提供唯一的数值
    •   共享对象
    •   主要用于提供主键值
    •   将序列值装入内存可以提高访问效率

    创建序列:

    1、  要有创建序列的权限 create sequence 或 create any sequence

    2、  创建序列的语法

    CREATE SEQUENCE sequence  //创建序列名

           [INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1

           [START WITH n]    //开始的值,递增默认是minvalue 递减是maxvalue

           [{MAXVALUE n | NOMAXVALUE}] //最大值

           [{MINVALUE n | NOMINVALUE}] //最小值

           [{CYCLE | NOCYCLE}] //循环/不循环

           [{CACHE n | NOCACHE}];//分配并存入到内存中

      NEXTVAL 返回序列中下一个有效的值,任何用户都可以引用

      CURRVAL 中存放序列的当前值

      NEXTVAL 应在 CURRVAL 之前指定 ,二者应同时有效

    Create sequence seqEmp increment by 1 start with 1 maxvalue 3 minvalue 1

    Cycle cache 2;

    //先nextval 后 currval

    Select seqEmp.nextval  from dual; 

    Select seqEmp.currval  from dual;

    Cache<(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT),这里的Cache的值应该比后面的小,但是Cache等于后面的值也不会出错,但是Cache的最小值是2,点我查看官方描述

    //解释

    {Create 创建

    Sequence 序列 seqEmop 序列名称

    Increment by 步长

    Stat with 1 开始值

    Maxvalue  最大值

    Minvalue  最小值

    Cycle 循环 nocycle 不循环

    Cache 缓存   Cache<maxvalue-minvalue/increment by//一般不采用缓存

    Nextvalue 下一个

    Currval 当前值

    }

    //实例应用

    //实现id的自动递增

    //第一步

    create table cdpt(

    id number(6),

    name varchar2(30),

    constraint pk_id primary key(id)

    );

    Create sequence seq_cdpt

    Increment by 1

    Start with 1

    Maxvalue 999999

    Minvalue 1

    Nocycle

    nocache

    insert into cdpt values(seq_cdpt.nextval,’feffefe’);

    commit;

    select * from cdpt;

    使用序列

    使用序列,会产生裂缝

    序列在下列情况下出现裂缝:

    •  回滚

    •  系统异常

    //修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存

    alter SEQUENCE sequence  //创建序列名称

           [INCREMENT BY n]  //递增的序列值是n 如果n是正数就递增,如果是负数就递减 默认是1

           [START WITH n]    //开始的值,递增默认是minvalue 递减是maxvalue

           [{MAXVALUE n | NOMAXVALUE}] //最大值

           [{MINVALUE n | NOMINVALUE}] //最小值

           [{CYCLE | NOCYCLE}] //循环/不循环

           [{CACHE n | NOCACHE}];//分配并存入到内存中

    修改序列的注意事项:

    •    必须是序列的拥有者或对序列有 ALTER 权限
    •    只有将来的序列值会被改变
    •    改变序列的初始值只能通过删除序列之后重建序列的方法实现

    Alter sequence seqEmp maxvalue 5;

    删除序列

       使用DROP SEQUENCE 语句删除序列

       删除之后,序列不能再次被引用

    Select seqEmp.nextval from dual;

    原文连接:Oracle序列详解

  • 相关阅读:
    struts2配置文件详解
    实体类和数据库映射--配置文件
    Hibernate常用配置文件详解
    本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。——Oracle监听器服务无法启动!
    关于远程访问Oracle数据库的设置(共享数据库)
    Log4J日志配置详解
    Java compiler level does not match the version of the installed Java project facet.问题
    Genymotion出现Unable to load VirtualBox engine问题--100%解决
    eclipse注解——作者,创建时间,版本
    web工程下的html中引用其他目录下的文件的path
  • 原文地址:https://www.cnblogs.com/HDK2016/p/6895332.html
Copyright © 2011-2022 走看看