oracle序列详解

oracle序列详解

转自:http://blog.csdn.net/java958199586/article/details/7360152

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

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

创建序列:

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

2、创建序列的语法
CREATE SEQUENCE sequence_name  //创建序列名称
            [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 缓存    //一般不采用缓存
Nextval 下一个
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 sequence seqEmp maxvalue 5;
Select seqEmp.nextval from dual;
         
修改序列的注意事项:
必须是序列的拥有者或对序列有 ALTER 权限
只有将来的序列值会被改变
改变序列的初始值只能通过删除序列之后重建序列的方法实现


删除序列
使用DROP SEQUENCE 语句删除序列
删除之后,序列不能再次被引用


下为一道OCP试题

Which  two  statements  are  true  about  sequences  created  in  single  instance  database?  (Choose
two.)
A.  The  numbers  generated  by  sequence  can  be  used  only  for  one  table.
B.  DELETE    would  remove  sequence  from  the  database.
C.  CURRVAL  is  used  to  refer  to  the  last  sequence  number  that  has  been  generated.
D.  When  the  MAXVALUE  limit  for  sequence  is  reached,  you  can  increase  the  MAXVALUE  limit  by  using
the  ALTER  SEQUENCE  statement.
E.  When  database  instance  shuts  down  abnormally,  the  sequence  numbers  that  have  been  cached  but
not  used  would  be  available  once  again  when  the  database  instance  is  restarted.
Answer:  CD
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值