数据库讲义 __ 【序列的概念】

  1. 【Sequence 序列】

序列是一类对象,它可以自动的产生唯一的整数,通常用来产生主健的值,每个用户可以建立多个序列

  1. 【下面开始建立和查看序列s1】

Create sequence s1

  Increment by 2

  Start with 1

              Maxvalue 10

  Minvalue -10

            Nocycle

  Nocache;

SQL >  Select * from user_sequences;

 Sequence_name  min_value  max_value  increment_by  c  o  cache_size  last_number

                                                                                                                                                                       

  S1                     -10           10              2               N N          0              1

  1. 【引用序列的值】

SQL >  Select  s1.nextval  from  dual;    取序列 s1 的下一个值。

SQL >  Select  s1.currval  from  dual;    取序列 s1 的当前值。

SQL >  Drop  table  d  purge;

SQL >  Create  table  d  as  select  *  from  dept  where  0 = 9;

建立一个和 dept 表结构相同,但不含任何行的空表。

SQL >  Insert  into  d( deptno )  values( s1.nextval );

SQL >  Insert  into  d( deptno )  values( s1.nextval );

SQL >  Select  *  from  user_sequences;

当序列没有值在内存中时,currval 属性无效,先 nextval 后,才会有效

  1. 【修改序列 】

序列的当前值一定得在最大和最小之间,步长不能为零

alter  sequence  s1  increment  by  -2;

alter  sequence  s1  cycle;

  1. 【序列值的不连续问题(gap)】

事物回退,序列号不会退。其它语句引用了该序列

Insert into d(deptno) values(s1.nextval);

Rollback;

Insert into d(deptno) values(s1.nextval);

Insert into dept(deptno) values(s1.nextval);

  1. 【Cache 序列的值到内存中 】

NOCACHE 每次取值都要计算。 CACHE n 一次就放入内存 n 个值。默认值为 20,如果你要连续的使用序列,如定单流水号的产生,请将 N 设大点。如果你不使用序列,而是自己写代码,请注意你的程序效率和竞争锁死情况的发生。停止数据库后,内存中存放的序列值会丢失 user_sequences 中的 last_number 列代表重新计算的起始值 序列中有一个 order 的选项,在单实例没有差别,它体现在集群 rac 环境中。默认的 Order项值为 no,就是不按照顺序发生。

例如实例 1 取 cache 为 20 的序列值,1 到 20 存储在 1 号实例内存,主机 2 再调用的时候,会将 21 到 40 存储在实例 2 的内存中。这样我们的会话在不同实例取的数值就会不同。Order 的意思为集群中的每个节点想要获得序列的值都要按照顺序得到序列的值。

  1. 【删除序列的例子: Drop sequence s1】

一旦被删除,就不可以再引用序列的值。使用序列的原则如下:

1、如果你想用做主键,请使用不可循环的序列。

2、如果想快速发生序列的值,请将 cache 的值加大。

3、如果序列内的值要很长时间才能使用完,可以考虑使用可以循环的序列。

【【  知识点  】】

  1. 序列是共享的对象
  2. 主要用来生产主键的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值