oracle序列详解

本文深入探讨了Oracle序列的功能、创建方法及实例应用,包括序列的四大特点、创建与修改步骤,以及序列在数据库操作中的具体用法。重点介绍了如何通过序列实现ID的自动递增,并讨论了序列在数据库中的裂缝现象及避免方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

oracle序列详解

转自:http://blog.youkuaiyun.com/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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值