chou_out_man的博客

博主还是一名学生,处于学习阶段,如有错误,欢迎指正!

oracel 中序列

oracel 中序列

一 、 前言

  1. 做过web开发的人员基本上都知道,数据库表中的主键值有的时候我们会用数字类型的并且自增。这样mysql、sql server中的都可以使用工具创建表的时候很容易实现。但是oracle中没有设置自增的方法,一般情况我们会使用序列和触发器来实现主键自增的功能。下面这面文章主要介绍序列。

二、 什么是序列:

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

三 、 序列的作用:

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

四、 创建序列

  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<max-min/increment
    
    
    
    //解释
    {
    Create 创建
    Sequence 序列 seqEmop 序列名称
    Increment by 步长
    Stat with 1 开始值
    Maxvalue  最大值
    Minvalue  最小值
    
    Cycle 循环 nocycle 不循环
    Cache 缓存   Cache<maxvalue-minvalue/increment by//一般不采用缓
    存
    Nextvalue 下一个
    Currval 当前值
    
    }
    
  3. CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;最小值为1。对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
  4. MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。
  5. MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增Oracle序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。
  6. CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。 缓存选项会造成数据丢失,当实例异常关闭时。

五 、 实例

    //实例应用
    //实现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;

六 、 什么时候出现裂缝

  1. 事务回滚
  2. 系统异常
  3. 多个表同时使用一个序列

七、怎么修改序列

  1. 语法

    //修改序列的增量, 最大值, 最小值, 循环选项, 或是否装入内存
    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 sequence seqEmp maxvalue 5;
        Select seqEmp.nextval from dual;
    
  2. 修改序列的注意事项
    1. 必须是序列的拥有者或对序列有ALTER权限
    2. 只有将来的序列值会被改变
    3. 改变序列的初始值只能通过删除序列之后重建序列的方法实现

八、 怎么删除序列

  1. 使用drop sequence 语句删除序列
  2. 删除之后序列不能再次被使用
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。如需交流,QQ773882719. https://blog.csdn.net/chou_out_man/article/details/80354926
文章标签: oracel
个人分类: oracle
想对作者说点什么? 我来说一句

C#中的oracel连接

2012年03月26日 26KB 下载

Oracel SQL tuning

2011年03月07日 441KB 下载

oracel 时间函数汇总

2009年07月27日 12KB 下载

ORACEL 函数大全

2010年09月29日 13KB 下载

oracel导入导出oracel导入导出

2010年12月29日 5KB 下载

没有更多推荐了,返回首页

不良信息举报

oracel 中序列

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭