oracle中的序列详解
一:序列的定义
1:序列(sequence)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字)。
2:不占用磁盘空间,占用内存。
3:主要用途是生成表的主键值,可在插入语句中引用,也可通过查询检查当前值,或使序列增值下一个值。
二:创建序列
创建序列需要CREATE SEQUENCE系统权限,创建语法如下:
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE/MINVALUE n | NOMAXVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n | NOCACHE}];
其中:
1:INCREMENT BY表示步长,默认为1,负值表示递减。
2:START WITH序列初始值,默认为1。
3:MAXVALUE序列产生最大值,默认为NOMAXVALUE,表没有最大,递减序列最大值为-1。
4:MINVALUE序列产生最小值,默认为NOMAXVALUE,表没有最小值,递增序列最小值为1。
5:CYCLE表循环,NOCYCLE表示不循环;使用循环,当增至最大值时,循环到最小值;对于递减序列,当减至最小值时,循环至最大;若不循环,当到达极限值后,报错。
6:CACHE表示使用内存缓存,内存块大小默认为20;NOCACHE表示不使用内存缓冲。
注意:当重启数据库时,会清空内存信息,内存序列会丢失,再次启动,序列从上次内存中最大的序列号+1 开始存入cache x个,这种情况下会导致序列号不连续。
7:NEXTVAL返回序列下一个有效值,任何用户都可以引用。
8:CURRVAL中存放序列当前值,NEXTVAL应在CURRVAL之前指定,二者应同时有效。
三:使用序列
1:调用NEXTVAL将生成序列中的下一个序列号。序列名.NEXTVAL
2:调用CURRVAL产生序列当前值,若序列还没有通过调用NEXTVAL产生过序列的下一个值,先引用CURRVAL没有意义。序列名.CURRVAL
四:将序列作为表的主键的方法
在向表中插入数据时调用nextval方法
insert into 表名 values (序列名.nextval,值1,值2,...);
转自:https://www.cnblogs.com/CandiceW/p/10062413.html