oracle 序列(sequence)
2012-11-16 15:56
351 查看
1.为啥要用序列:
序列可以自动生成递增或递减的不重复的数字.所以用它来做表的主键是一个高效的方法.不然手动去为每一行生成一个主键可是个麻烦的事2.创建序列:
语法:CREATE SEQUENCE [schema.]sequence_name
[START WITH i] [ INCREMENT BY j]
[MAXVALUE m | NOMAXVALUE] [MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE] [CACHE p | NOCACHE]
每个参数意义:
i表示序列的第一个值.
j为正数表示递增,为负数表示递减.j的大小表示每两序列的值相差为几.
m表示序列可生成的最大值.n表示最小值.注意i与n的区别.假设最小值n为1.则i就可为大于或等于n小于或等于m的任意整数.
如果啥参数都不指定,比如:CREATE SEQUENCE default.
则i默认为1. j默认为1.没有最大值最小值.nocycle.p为20
CYCLE:
假如我们指定NOCYCLE,最小值为10,最大值为12,增距为1的序列.连续使用3次后就会出错了.提示说超过最大值了.如果指定
CYCLE则会连续产生10,11,13,10,11,13....
CACHE P:
p的值表示预取多少个序列值在内存中,提高获取效率.比如p取10的话内存中会生成10个序列号在那.如果你只用了5个.然后突然Oracle服务器关了.
这样就会掉失5个序列号.理论上应该是这样,不过我还没试过啊.
如果不选CYCLE的话p可取大于0的任何整数.但如果选了CYCLE则系统会计算一个循环内共会产生多少个序列号设为n,p的值必须小于n.
例如:CREATE SEQUENCE emp_seq START WITH 10 INCREMENT BY 1 MAXVALUE 15 CYCLE CACHE 6;则会出错p必须是小于6的数
这样设计的目的可能是为了节约内存,最多只能生成6个序列号,如果占用大于容纳6个序列号的内存就是浪费.但在用nocycle时没做这样的检查,不知道为啥.
3使用序列
CREATE SEQUENCE emp_seq START WITH 10 INCREMENT BY 1;序列中有两个伪列nextval,currval.使用一次nextval则生成一个新的序列号.currval则用来查看目前生成的序列号是多少.
注意刚新建一个序列后还不能用currval,因为当前还没有序列号.必须至少使用一次nextval后再使用.
使用序列主要就是使用nextval.另外序列也是一个独立的对象.许多表可以共用一个序列.不过这样在一个表中生成的序列号就不连续.
INSERT INTO emp(ename,empno) VALUES(emp_seq.nextval,'one');--插入10,'one'
INSERT INTO emp(ename,empno) VALUES(emp_seq.nextval,'two');--插入11,'two'
4.修改序列
除了起始值不能改,其他值都能改.比如修改上一个序列ALTER SEQUENCE emp_seq INCREMENT BY 10;
修改后它会以之前的序列号11为起点,增加10就是了.对之前生产的序列号不会有影响
INSERT INTO emp(ename,empno) VALUES(emp_seq.nextavl,'three');--插入21,'three'
INSERT INTO emp(ename,empno) VALUES(emp_seq.nextavl,'four');--插入31,'four'
删除序列:
DROP SEQUENCE emp_seq;
相关文章推荐
- Oracle中的自增-序列-SEQUENCE
- Oracle序列sequence
- Oracle 序列 Sequence
- ORACLE PL/SQL 中序列(sequence)的简易使用方法介绍 - [Oracle SQL]
- Oracle——22序列(sequence)
- Oracle学习(4)--序列sequence、函数Function
- oracle的sequence的序列
- (学) 如何将 Oracle 序列 重置 清零 How to reset an Oracle sequence
- Oracle新表使用序列(sequence)作为插入值,初始值不是第一个,oraclesequence
- MySQL实现ORACLE序列(Sequence)的解决方案
- Oracle 中序列(sequence)和触发器(trigger)的使用
- oracle 序列SEQUENCE
- Oracle序列的(Sequence)使用
- ORACLE 自增序列SEQUENCE
- [Oracle]创建序列sequence
- Oracle中Sequence序列的使用
- Oracle序列(Sequence)创建、使用、修改、删除
- Oracle 序列 sequence
- oracle如何实现自增?----用序列sequence的方法来实现