zoukankan      html  css  js  c++  java
  • oracle 序列的使用

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

             自动提供自增的唯一的数值。

             共享的数据

             主要用于提供主键值

             将序列装入内存可以提高访问效率

    1.创建序列:

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

                2、  创建序列的语法:

                        create sequence sequence   //创建序列名称                                                       create sequence seq_stu  

                        increment by  n                  //递增的序列值是n,                                                  increment by 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 当前值

    }

    //实例应用

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

    /使用序列

    会产生裂缝

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

    •  回滚

    •  系统异常

    >多个表同时使用同一序列

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

    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}];//分配并存入到内存中

    修改序列的注意事项:

    l   必须是序列的拥有者或对序列有 ALTER 权限

    l   只有将来的序列值会被改变

    l   改变序列的初始值只能通过删除序列之后重建序列的方法实现

    删除序列

    l   使用DROP SEQUENCE 语句删除序列

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

    Alter sequence seqEmp maxvalue 5;

    Select seqEmp.nextval from dual;

    我的例子:

    Create sequence seq_stu

    Increment by 1

    Start with 1

    Maxvalue 999999

    Minvalue 1

    Nocycle

    nocache

    insert into STUDENTS (stu_id,name,age,grade)VALUES(seq_stu.nextval,'shali','14','1')
                      

  • 相关阅读:
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 697 数组的度(类似于数组的map)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 696 计数二进制子串(暴力)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    Java实现 LeetCode 695 岛屿的最大面积(DFS)
    PHP serialize() 函数
    PHP print_r() 函数
  • 原文地址:https://www.cnblogs.com/lovefan/p/3388400.html
Copyright © 2011-2022 走看看