oracle 序列创建和使用

序列的概念和使用
点评:主键尽量使用序列发生!rac的情况考虑 order属性!
该实验的目的是操作序列,使用序列进行插入操作。
Sequence 序列
序列是一类对象
它可以自动的产生唯一的整数
通常用来产生主健;的值
每个用户可以建立多个序列
下面我们建立和查看序列 s1。

    <!-- lang: sql -->
     CREATE SEQUENCE s1
            START WITH 1  --序列初始化默认值
            INCREMENT BY 1  --每次序列的增长值
            MAXVALUE 10 --序列增长的最大值
            MINVALUE -10  --序列增长的最小值
            NOCYCLE
            NOCACHE;
--查询当前用户下所有的序列

    <!-- lang: sql -->
    select * from user_sequences;


--初始化序列的值 ps:每执行一次s1.nextavl会根据increment by 后面的这个值增加

    <!-- lang: sql -->
    select s1.nextavl from dual;
--查看当前序列的值 注意如果当前序列的值没有被初始化过执行下面sql会报错

    <!-- lang: sql -->
    select s1currval from dual;
--修改序列中某些属性的值 其他的值也以此类推

    <!-- lang: sql -->
    alter sequence s1 increment by -2;
--删除oracle 序列

    <!-- lang: sql -->
    drop sequence 序列名称;

    <!-- lang: sql -->
    --创建一张表来测试一下序列
    create table d(
      deptno varchar(12) not null
    );
    select * from d;
    insert into d (deptno) values(s1.nextval);
    commit;
    --注意事物回退,序列号是不会退的



> NOCACHE 每次取值都要计算。
CACHE n 一次就放入内存 n个值。默认值为 20,如果你要连续的使用序列,如定
号的产生,请将 N设大点。如果你不使用序列,而是自己写代码,请注意你的程序效
竞争锁死情况的发生。
停止数据库后,内存中存放的序列值会丢失
user_sequences 中的last_number 列代表重新计算的起始值
序列中有一个 order 的选项,在单实例没有差别,它体现在集群 rac环境中。默认的
项值为 no,就是不按照顺序发生。例如实例 1取cache为20的序列值,1到20存储在
例内存,主机2再调用的时候,会将21到40存储在实例 2的内存中。这样我们的会
同实例取的数值就会不同。Order 的意思为集群中的每个节点想要获得序列的值都要
序得到序列的值。
删除序列的例子: Drop sequence s1;
一旦被删除,就不可以再引用序列的值。
使用序列的原则如下:
如果你想用做主键,请使用不可循环的序列。
如果想快速发生序列的值,请将 cache的值加大。
如果序列内的值要很长时间才能使用完,可以考虑使用可以循环的序列。
ps:如果大家有更好的分享或者已经可以发我邮箱 [email protected]
web开发扣扣群:87104515

猜你喜欢

转载自fluotao.iteye.com/blog/1880910