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的值加大。
如果序列内的值要很长时间才能使用完,可以考虑使用可以循环的序列。
[color=blue]ps:如果大家有更好的分享或者已经可以发我邮箱 f_luotao@163.com
web开发扣扣群:87104515[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值